使用子查询加入
Joins using Sub Queries
我有两个名为 "Book" 和 "Author." 的 table "Book" table 的属性是:PK- Book_Num、Book_Title、Book_Year、Book_Cost、Book_Subject。 "Author" table 的属性是 PK- Au_ID, Au_Fname, Au_Lname. 这两个 table 之间有 M:N 关系它们之间的桥梁 table 被命名为 "Writes" 并且它有一个来自两个 table 的复合主键,由 Book_Num 和 Au_ID 组成. 这是我的问题:我想编写一个查询来显示 Au_ID、Au_Fname、Au_Lname 的所有作者,这些作者从未写过主题为 [= 的书23=] 并按 Au_Lname 对结果进行排序。我将如何使用子查询执行此操作?
试一试:
SELECT A.Au_ID, A.Au_Fname, A.Au_Lname FROM Author A
JOIN Writes W ON A.Au_ID = W.Au_ID
JOIN Book B ON B.Book_Num = W.Book_Num
WHERE A.Au_ID NOT IN (
SELECT A.Au_ID FROM Author A
JOIN Writes W ON A.Au_ID = W.Au_ID
JOIN Book B ON B.Book_Num = W.Book_Num
WHERE B.Book_Subject = 'Programming'
)
ORDER BY A.Au_Lname ASC;
如果你想要更好的性能,你可以使用"NOT EXISTS"来获取你想要的数据。
SELECT Au_ID, Au_Fname, Au_Lname FROM Author
WHERE NOT EXISTS
(
SELECT A.Au_ID FROM Author A
JOIN Writes W ON A.Au_ID = W.Au_ID
JOIN Book B ON B.Book_Num = W.Book_Num
WHERE B.Book_Subject = 'Programming'
AND Author.Au_ID = A.Au_ID
)
ORDER BY Au_Lname ASC
我有两个名为 "Book" 和 "Author." 的 table "Book" table 的属性是:PK- Book_Num、Book_Title、Book_Year、Book_Cost、Book_Subject。 "Author" table 的属性是 PK- Au_ID, Au_Fname, Au_Lname. 这两个 table 之间有 M:N 关系它们之间的桥梁 table 被命名为 "Writes" 并且它有一个来自两个 table 的复合主键,由 Book_Num 和 Au_ID 组成. 这是我的问题:我想编写一个查询来显示 Au_ID、Au_Fname、Au_Lname 的所有作者,这些作者从未写过主题为 [= 的书23=] 并按 Au_Lname 对结果进行排序。我将如何使用子查询执行此操作?
试一试:
SELECT A.Au_ID, A.Au_Fname, A.Au_Lname FROM Author A
JOIN Writes W ON A.Au_ID = W.Au_ID
JOIN Book B ON B.Book_Num = W.Book_Num
WHERE A.Au_ID NOT IN (
SELECT A.Au_ID FROM Author A
JOIN Writes W ON A.Au_ID = W.Au_ID
JOIN Book B ON B.Book_Num = W.Book_Num
WHERE B.Book_Subject = 'Programming'
)
ORDER BY A.Au_Lname ASC;
如果你想要更好的性能,你可以使用"NOT EXISTS"来获取你想要的数据。
SELECT Au_ID, Au_Fname, Au_Lname FROM Author
WHERE NOT EXISTS
(
SELECT A.Au_ID FROM Author A
JOIN Writes W ON A.Au_ID = W.Au_ID
JOIN Book B ON B.Book_Num = W.Book_Num
WHERE B.Book_Subject = 'Programming'
AND Author.Au_ID = A.Au_ID
)
ORDER BY Au_Lname ASC