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

MySQL SELECT 語法完整解析:從基礎查詢到進階子句應用

     編輯:MySQL 綜合教學

SELECT 完整語法骨架

SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY]
    [DISTINCT | DISTINCTROW | ALL]
    select_list
    [INTO {OUTFILE | DUMPFILE} 'file_name' export_options]
    [FROM table_references
        [WHERE where_definition]
        [GROUP BY col_name,... [HAVING where_definition]]
        [ORDER BY {col_name | expr | position} [ASC | DESC], ...]
        [LIMIT [offset,] rows]
        [PROCEDURE procedure_name]]

核心子句詳細說明

1. 選取清單

  • *:依建表順序所有欄位。
  • 指定欄位清單,可用 AS 別名:col AS alias。
  • 運算式:常數、函數、算術/位元運算組合。
  • 聚合函數:COUNT, SUM, AVG, MAX, MIN, STD, BIT_OR, BIT_AND 等。

2. FROM 與表別名

SELECT t1.name, t2.salary
FROM employee AS t1, info AS t2
WHERE t1.name = t2.name;

別名不可數字開頭,後續 WHERE/HAVING 必須使用別名。

3. WHERE 條件構建

運算子/關鍵字說明
=, <>, !=, >, <, >=, <=比較運算子,字串比較依字元集排序,尾部空格忽略
BETWEEN ... AND ...範圍查詢,含邊界
IN (val1, val2...)集合包含
LIKE模糊比對,% 多字元、_ 單字元,亦可用於數值/日期
IS NULL / IS NOT NULL空值判斷
AND / OR / NOT邏輯組合,AND 優先於 OR,可用括號改變順序

4. GROUP BY 與 HAVING

SELECT dept, COUNT(*) AS cnt, AVG(salary) AS avg_sal
FROM emp
GROUP BY dept
HAVING COUNT(*) > 5;
  • GROUP BY 可用欄位、別名、位置編號。
  • HAVING 可使用聚合函數,WHERE 不可。
  • WITH ROLLUP 產生超級彙總行 (MySQL 擴充)。

5. ORDER BY 排序

  • 預設 ASC 升序,DESC 降序。
  • 可用欄位名、別名、SELECT 清單位置編號 (不建議)。

6. LIMIT 分頁

LIMIT 5          -- 前 5 筆 (offset=0)
LIMIT 0, 5       -- 同上
LIMIT 10, 20     -- 跳過 10 筆,取 20 筆

7. INTO OUTFILE / DUMPFILE 匯出檔案

  • 檔案建立於伺服器端,不可覆蓋既有檔案。
  • OUTFILE:每列換行,欄位依 export_options 格式。
  • DUMPFILE:僅寫入單行原始資料,無格式化。

MySQL 專有擴充關鍵字

  • STRAIGHT_JOIN:強制按 FROM 順序聯結。
  • SQL_SMALL_RESULT / SQL_BIG_RESULT:提示優化器結果集大小,影響暫存表 vs 排序策略。
  • HIGH_PRIORITY:提升 SELECT 優先權高於寫入鎖。

常見陷阱與最佳實踐

  • 避免 SELECT * 於生產環境,明確列出欄位利於維護與效能。
  • 大表分頁 LIMIT 100000, 20 效能差,建議用游標式分頁 (WHERE id > last_id LIMIT 20)。
  • GROUP BY 隱含排序 (MySQL ≤ 5.7),5.7+ 需顯式 ORDER BY NULL 關閉。
  • 日期時間查詢善用 LIKE '2023-01-%' 避開秒/毫秒干擾。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved