我正在閱讀數據庫系統概念由漢克Korth.The書陳述以下給出了所有學生誰已採取所有課程 在生物系提供列表。混淆與空關係測試使用'不退出'
select distinct S.ID, S.name
from student as S
where not exists (
(
select course id
from course
where dept name = 'Biology'
)
except
(
select T.course id
from takes as T
where S.ID = T.ID
)
);
student(ID, name, dept name, tot cred)
course(course id, title, dept name, credits)
takes(ID, course id, sec id, semester, year, grade)
但是,我的理解,最後的子查詢發現誰是服用至少一門課程的所有學生,並通過從第一子查詢做減,我們減去當前採取的同學們都生物學課程,所以我們將留下任何學生都沒有參加的生物課程(如果有的話)。然後,當我們對所有學生的ID都「不存在」時,我們正在尋找沒有參加那些發現的生物課程以及他們可以參加的學生ID除了生物學以外的任何課程。但是這並不包括正在接受生物系所有課程的學生名單。請給予解釋? 請注意:我確實瞭解如果'不存在',使用this 網站,但我沒有得到這本書的例子。
請修改您的帖子並**刪除**不適用於您的問題的標籤('mysql','oracle')。你真的**使用哪種數據庫系統? – mathguy
oracle開發人員 –