首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

SQL 入門必讀:常用查詢語句與技巧大全(以學生成績管理為例)

     編輯:MySQL 資料庫相關知識

本文以「學生成績管理資料庫」為情境,系統整理 SQL 基礎到進階的常用語法與技巧,適合初學者快速建立查詢直覺。

核心查詢技巧分類

1. 欄位別名與顯示控制

SELECT name AS '姓名' FROM students ORDER BY age;
SELECT name '姓名' FROM students ORDER BY age;  -- 簡寫

2. 精確與範圍過濾

  • IN:WHERE native IN ('湖南','四川')
  • BETWEEN ... AND:WHERE age BETWEEN 20 AND 30
  • = 精確匹配
  • LIKE 模糊匹配:'李%'(開頭)、'%李%'(包含)、'_李%'(第二字)
  • [] 字元集合:LIKE '[AC]%' 或 LIKE '[A-C]%'

3. 日期時間處理

smalldatetime 視為字串比較:WHERE birth >= '1980-1-1' AND birth <= '1980-12-31'

4. 聚合函數

  • COUNT(*) 總筆數
  • AVG(欄位) 平均值
  • MAX/MIN 極值

5. 分組統計與 HAVING

SELECT gender, COUNT(sno) FROM students GROUP BY gender;
SELECT grade, mno, gender, COUNT(*) FROM students GROUP BY grade, mno, gender;
SELECT sno, COUNT(*) FROM grades WHERE mark < 60 GROUP BY sno HAVING COUNT(*) > 1;

6. UNION 合併結果

SELECT * FROM students WHERE name LIKE '張%'
UNION [ALL]
SELECT * FROM students WHERE name LIKE '李%';

7. 多表連接大全

  • 內連接:JOIN ... ON,配合別名簡潔明確。
  • 左/右/全外連接:保留單側/雙側所有資料,LEFT JOIN 常用於「主表全顯、從表無資料亦顯示」。
  • 自我連接:同表不同別名關聯,如課程前置條件查詢。
  • 交叉連接:笛卡兒積,CROSS JOIN。

8. 子查詢與 EXISTS

  • IN 子查詢:查詢李山同鄉學生。
  • EXISTS 相關子查詢:效能通常優於 IN,邏輯等價於 IN 但可利用索引。

9. 排序技巧

  • ASC/DESC 升/降序。
  • 按選取清單位置排序:ORDER BY 3(第三個欄位)。

10. 實用細節與陷阱

  • 含空格識別名用 [] 括住。
  • IS NULL 判斷空值。
  • ANY(OR 邏輯)vs ALL(AND 邏輯)區別。
  • 否定查詢陷阱:WHERE cno <> 'B2' 錯誤,正確用 NOT EXISTS 關聯子查詢。
  • 多重嵌套解題思維:由外而內,逐層排除。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved