以下用LEFT OUTER JOIN 和嵌套(NOT IN)两种方法来完成查询 (1)从来没有被借阅过的图书清单,结果显示图书名,作者。 (2)从来没有借过书的读者清单,结果显示读者姓名,读者单位。 (3)借过书号“11”这本书的读者姓名。(连接,嵌套,EXISTS三种方法完成此题。效率考虑,推荐实际使用时使用 INNER JOIN) (4)没借过书号“11”这本书的读者姓名。(NOT IN 嵌套,NOT EXISTS 两种种方法完成此题。效率考虑,推荐实际使用时使用 NOT EXISTS),相关字段可以用中文表示
时间: 2024-03-23 13:42:01 浏览: 270
1. 使用 LEFT OUTER JOIN 方法查询从来没有被借阅过的图书清单:
```
SELECT books.book_name, books.author
FROM books
LEFT OUTER JOIN borrow ON books.book_id = borrow.book_id
WHERE borrow.borrow_id IS NULL;
```
2. 使用 LEFT OUTER JOIN 方法查询从来没有借过书的读者清单:
```
SELECT readers.reader_name, readers.reader_unit
FROM readers
LEFT OUTER JOIN borrow ON readers.reader_id = borrow.reader_id
WHERE borrow.borrow_id IS NULL;
```
3. 使用 INNER JOIN 方法查询借过书号“11”这本书的读者姓名:
```
SELECT readers.reader_name
FROM readers
INNER JOIN borrow ON readers.reader_id = borrow.reader_id
WHERE borrow.book_id = '11';
```
使用嵌套查询的方法可以写成:
```
SELECT reader_name
FROM readers
WHERE reader_id IN (
SELECT reader_id
FROM borrow
WHERE book_id = '11'
);
```
使用 EXISTS 子查询的方法可以写成:
```
SELECT reader_name
FROM readers
WHERE EXISTS (
SELECT *
FROM borrow
WHERE borrow.reader_id = readers.reader_id
AND borrow.book_id = '11'
);
```
4. 使用 NOT IN 嵌套查询的方法查询没借过书号“11”这本书的读者姓名:
```
SELECT reader_name
FROM readers
WHERE reader_id NOT IN (
SELECT reader_id
FROM borrow
WHERE book_id = '11'
);
```
使用 NOT EXISTS 子查询的方法可以写成:
```
SELECT reader_name
FROM readers
WHERE NOT EXISTS (
SELECT *
FROM borrow
WHERE borrow.reader_id = readers.reader_id
AND borrow.book_id = '11'
);
```
注意,如果 borrow 表中存在 NULL 值,上述查询可能会出现意外结果。为了避免这种情况,可以使用 LEFT OUTER JOIN 和 IS NULL 或者 NOT EXISTS 子查询来进行查询。
阅读全文