LibraryDB是一个数据库系统,可在假想的图书馆中跟踪有关书籍及其流通的信息。
下面给出了LibraryDB数据库的模式:(请注意book_copy关系跟踪图书馆藏书中书籍的物理副本。)
- 借入(transactionID,personID *,借阅日期,到期日,返回日期)
- 作者(authorID,名字,中间名,姓氏)
- book_copy(bookID,bookdescID *)
- 书籍(bookdescID,标题,字幕,版本,标题,卷号,语言,位置,年份,isbn,杜威,subjectID *)
- 借款复制(交易ID *,书ID *)
- 人员(人员ID,名字,中间名,姓氏,地址,城市,邮政编码,电话号码,电子邮件地址,studentno,idcardno)
- 发布者(publisherID,publisherfullname)
- writer_by(bookdescID *,authorID *,角色)
- Published_by(bookdescID *,publisherID *,角色)
- 主题(subjectID,subjecttype)
我试图在SQLite中编写两种类型的SQL语句以显示从未借阅的书籍的标题。
一种使用LEFT OUTER JOIN子句:
SELECT title
FROM book INNER JOIN book_copy
ON book.BOOKDESCID = book_copy.BOOKDESCID
LEFT OUTER JOIN borrow_copy
ON borrow_copy.BOOKID = book_copy.BOOKID
WHERE borrow_copy.TRANSACTIONID IS NULL;
返回323行。
一种不使用OUTER JOIN子句的方法:
SELECT title
FROM book
WHERE bookdescID IN
(SELECT bookdescID
FROM book_copy
WHERE bookID NOT IN
(SELECT bookID
FROM borrow_copy));
仅返回了298行。
为什么这两个SQL语句返回两个不同的结果?
在显示从未借用的书名时,哪一种是正确的?