SQL之雙重not exists


 

 

 

 答案:

select sname from s where not exists (select * from c where teacher = '程軍' and not exists (select * from sc where c.cno = sc.cno and sc.sno = s.sno));
怎么寫這道題呢?首先我們知道題意問的就是選擇 學生選了程軍老師教授的全部課程,我們知道正常情況我們用sql不好解決,因為判斷一個學生是否學過程軍老師的所有課程不好搞,我們可以采用逆否命題形式,也就是 不存在學生沒選過程軍老師教授的全部課程(注意:沒學過程軍老師教的全部課程不代表沒學過程軍老師教的課,只是沒全選)。
具體的:首先我們找到學生學過的課程的數據集(select * from sc where sc.sno = s.sno),然后找到學生沒學過的課程(select * from sc where c.cno = sc.cno and sc.sno = s.sno),以及是程軍老師教的且學生沒學過的課程(select * from c where teacher = '程軍' and not exists (select * from sc where c.cno = sc.cno and sc.sno = s.sno)),如果這個同學不存在是程軍老師教的且學生沒學過的課程,那么他的程軍老師教的且學生沒學過的課為空集,那就是程軍老師教的課都學過。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM