以下用LEFT OUTER JOIN 和嵌套(NOT IN)两种方法来完成查询 (1)从来没有被借阅过的图书清单,结果显示图书名,作者。 (2)从来没有借过书的读者清单,结果显示读者姓名,读者单位。
时间: 2024-03-23 18:42:37 浏览: 25
(1)使用 `LEFT OUTER JOIN` 的方式:
```
SELECT bookName, author
FROM tb_book
LEFT OUTER JOIN tb_booklend ON tb_book.bookCode = tb_booklend.bookCode
WHERE tb_booklend.bookCode IS NULL;
```
使用 `NOT IN` 的方式:
```
SELECT bookName, author
FROM tb_book
WHERE bookCode NOT IN (SELECT bookCode FROM tb_booklend);
```
(2)使用 `LEFT OUTER JOIN` 的方式:
```
SELECT readerName, readerUnit
FROM tb_reader
LEFT OUTER JOIN tb_booklend ON tb_reader.readerId = tb_booklend.readerId
WHERE tb_booklend.readerId IS NULL;
```
使用 `NOT IN` 的方式:
```
SELECT readerName, readerUnit
FROM tb_reader
WHERE readerId NOT IN (SELECT readerId FROM tb_booklend);
```
这样就用 `LEFT OUTER JOIN` 和嵌套(`NOT IN`)两种方法分别完成了两个查询。
相关问题
查询从来没有人借阅过的图书信息,列出书号,书名,作者,结果按书号升序排列。
假设我们有两张表,一张是`book`表,包含`id`,`name`和`author`三个字段,另一张是`borrow_record`表,包含`id`和`book_id`两个字段,其中`book_id`是图书id:
```
book表:
+----+------+--------+
| id | name | author |
+----+------+--------+
| 1 | A | X |
| 2 | B | Y |
| 3 | C | Z |
+----+------+--------+
borrow_record表:
+----+---------+
| id | book_id |
+----+---------+
| 1 | 1 |
| 2 | 2 |
+----+---------+
```
则可以使用以下SQL语句查询从来没有人借阅过的图书信息,列出书号,书名,作者,结果按书号升序排列:
```
SELECT b.id, b.name, b.author
FROM book b
LEFT JOIN borrow_record br ON b.id = br.book_id
WHERE br.id IS NULL
ORDER BY b.id;
```
这个查询语句中,我们使用了`LEFT JOIN`将`book`表和`borrow_record`表连接起来,并以`book`表为基础进行查询。使用`WHERE`语句筛选出没有借阅记录的图书。最后使用`ORDER BY`语句按照书号升序排列。
输出结果如下:
```
+----+------+--------+
| id | name | author |
+----+------+--------+
| 3 | C | Z |
+----+------+--------+
```
可以看到,我们查询出来的是从来没有人借阅过的图书信息,只有一本书。
left outer join 和 left join
left outer join和left join的作用是一样的,都是用来连接两个表并返回左表中所有的记录以及右表中符合条件的记录。区别在于left outer join比left join多了一个outer,表示左表的所有记录都会被返回,而右表中没有符合条件的记录的地方将会填充为null值。因此,如果你想返回左表中所有的记录,不管右表中是否有符合条件的记录,那么可以使用left outer join。如果你只想返回左表中和右表中符合条件的记录,那么可以使用left join。
举个例子,假设有两个表A和B,A表中有5条记录,B表中有3条记录,其中2条记录和A表中的记录匹配,那么使用left outer join连接这两个表时,将会返回5条记录,其中3条记录的B表字段为null。而使用left join连接这两个表时,将会返回2条记录,其中B表字段不为null。