自己做到這個部分一直迷惑,網上有很多種解答,我也突然有了思考,暫且記下。
標準答案是圖片這樣
我們可能最內層它的意義就是某人所選修的全部課程
倒數第二層就是從課程表中選擇最里層中(某人選修的所有課程中)所缺失的,如果這個人把所有的課選完了,那么這一層查找為空,反之只要沒選完,這一層就會輸出沒有被這個人選擇的課程。
然后看最外層,not exists就是說不存在才輸出元祖。不存在什么?不存在上一層中某人沒有選的課,也就是某人把課選完了。這才輸出這個人的學號。
如果這個人有課沒有選,在中間那一層中就會有沒有被選的課的資訊,那么最外層的not檢測到有值,就不輸出當前所監測的元組(某個人)的資訊。
這是一次簡單的理解,可能與拿著元組去檢測的說法有所不同,但是意義一樣。
僅留作自用,如有賜教感謝評論。
uj5u.com熱心網友回復:
找個SQL能正常運行?第4行是個條件,From 后面可以不跟表或者結果集合,而跟個條件嗎?
uj5u.com熱心網友回復:
select s.sname from student s where s.sno not in (
select s1.sno from student s1 cross join course c1
where s1.sno+c1.cno not in
(select sc.sno+sc.cno from sc))
select sname from student where student.sno not in
(select distinct sc1.sno from
(select * from student s1 cross join course c1) sc1
left outer join sc on sc1.sno = sc.sno and sc1.cno = sc.cno
where sc.sno is null)
如果不考慮效率的話,上面兩種方法應該能夠滿足你的要求。
都是先找出沒有選修全部課程的學生的sno,然后用not in排除掉,得到選修所有課程的學生
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/30219.html
標籤:VB基礎類
上一篇:求教大佬!。
下一篇:VB新手,請問怎么編程???
