【sql: 練習題7】查詢沒有學全所有課程的同學的信息


題目:查詢沒有學全所有課程的同學的信息

分析:沒有學全? 意思是我是不是可以這樣想:student_score 我以用戶id 進行分組,然后拿到每個用戶的課程id count < 課程 student_course 的count 總數 

就算是 沒有學全,於是sql來了

 

SELECT student.* FROM student,
    (SELECT studentid, COUNT(*) AS a FROM student_score GROUP BY studentid HAVING a<(SELECT COUNT(*) FROM student_course))b
WHERE student.id = b.studentid

 

問題來了:這里是根據學生分數表 為基數查詢的,有的學生在分數表里面一條記錄都沒有,沒有學過任何一門課程,那么這樣的群體就查不出來了

 

於是 要 反向思維 來寫這個:我們先查詢所有學過完整課程的學生,然后我們要沒有學完的學生 就是 not in

 

SELECT student.* FROM student WHERE student.id NOT IN
    (SELECT studentid FROM student_score GROUP BY studentid HAVING COUNT(courseid) = (SELECT COUNT(*) FROM student_course))

 

 

查詢的結果集明顯跟上面的不一樣  ....


免責聲明!

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



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