在學習 SQL 時,初學者常犯的一個錯誤是混淆 GROUP BY 與 WHERE 的使用場景。例如有人嘗試用以下語句來「查詢選修 2 號課程且成績在 90 分以上的所有學生」:
select grade, cno=2 from sc group by cno having count(grade) >= 90
這句語法有幾個嚴重問題:
cno=2 在選取清單中會被視為邏輯判斷(真/偽),而非過濾條件。GROUP BY cno 會將資料按課程分組,但題目要求的是針對特定課程(cno=2)的學生明細,不需要分組統計。HAVING COUNT(grade) >= 90 是統計每組的筆數是否大於等於 90,與「成績 >= 90」完全無關。只需用 WHERE 子句直接過濾課程編號與分數:
select grade, cno from sc where cno = 2 and grade >= 90
這樣即可精確取出符合條件的每一筆學生成績記錄,簡潔且效能最佳。
WHERE,避免不必要的 GROUP BY 導致邏輯錯誤。掌握這兩者的差異,能讓你的 SQL 查詢更精準、更高效。