首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL SELECT 查詢進階語法詳解:排序、分頁、去重、集合與子查詢

     編輯:MySQL 綜合教學

MySQL SELECT 查詢進階語法詳解

1. ORDER BY 排序

  • 語法:ORDER BY col1 ASC|DESC, col2 ASC|DESC ...
  • 多欄位排序:先按第一欄,無法區分時再按第二欄,以此類推。

2. LIMIT 分頁

  • 語法:LIMIT offset, row_count (offset 從 0 起)。
  • 範例:LIMIT 2,3 表示跳過前 2 筆,取 3 筆 (第 3~5 筆)。

3. DISTINCT 去重

  • 語法:SELECT DISTINCT col FROM ... 移除結果集中重複列。

4. UNION 集合運算

  • 合併兩個查詢結果,預設去重:(SELECT ...) UNION (SELECT ...)
  • 保留重複:UNION ALL。
  • 子查詢排序需配合 LIMIT 才生效;最終結果排序在最後加 ORDER BY。

5. 子查詢分類與實例

  • 位置:WHERE 型、FROM 型 (派生表)、EXISTS 型。
  • 返回形式:標量 (單值)、列、表。
  • 實例:
    • 查詢授課天數最多的老師:SELECT t_name FROM t_teacher WHERE teach_days=(SELECT MAX(teach_days) FROM t_teacher); (避免用 LIMIT 1 導致漏資料)。
    • 集合比較:IN, NOT IN, ANY, ALL。
    • 行子查詢:WHERE (gender, course_name) = (SELECT ...) 構建行進行比較。
    • FROM 型:將複雜邏輯分步,子查詢結果作為派生表。
    • EXISTS:EXISTS (subquery) 相當布林判斷是否有資料。

6. 連接查詢 (JOIN)

  • INNER JOIN:內連接,僅返回匹配行。CROSS JOIN 為笛卡兒積。
  • OUTER JOIN:
    • LEFT JOIN:左表全部保留,右表無匹配填 NULL (最常用)。
    • RIGHT JOIN:右表全部保留。
    • FULL JOIN:MySQL 不直接支援,可用 UNION 模擬。
  • NATURAL JOIN:自動以同名欄位為條件連接。
  • 連接條件:ON (指定條件)、USING (同名欄位)、WHERE (後置過濾)。
  • 多表連接:可鏈式連接,如 t1 LEFT JOIN t2 ON ... LEFT JOIN t3 ON ...。

實戰範例

  1. 雙向連接同一表:比賽表 match 需分別關聯主隊、客隊名稱,需 LEFT JOIN team 兩次。
  2. 自我連接:課程表查詢間接先修課,SELECT first.cno, second.cpno FROM course first, course second WHERE first.cpno=second.cno;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved