首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL 查詢常見錯誤:正確撰寫「查詢選修 2 號課程且成績 90 分以上學生」的語句

     編輯:程式設計綜合問答

在學習 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:在分組前過濾資料列,適用於非聚合條件。
  • HAVING:在分組後過濾群組,需搭配聚合函數(COUNT、SUM、AVG 等)。
  • 若無需分組統計,請直接使用 WHERE,避免不必要的 GROUP BY 導致邏輯錯誤。

掌握這兩者的差異,能讓你的 SQL 查詢更精準、更高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved