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

MySQL SELECT 語法全解析:從基礎到進階擴展選項

     編輯:MySQL 綜合教學

完整語法骨架

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,] row_count] [PROCEDURE procedure_name]

核心子句深度解析

1. 查詢修飾符 (MySQL 擴展)

關鍵字作用適用場景
STRAIGHT_JOIN強制按 FROM 順序聯表優化器選錯聯表順序導致慢查詢時
SQL_SMALL_RESULT結果集小,用臨時表而非排序GROUP BY/DISTINCT 結果確定很小
SQL_BIG_RESULT結果集大,用排序而非臨時表GROUP BY/DISTINCT 結果確定很大
HIGH_PRIORITY比 UPDATE 更高優先級執行極高優先級的即時查詢 (慎用)

💡 **實戰建議**:99% 場景 **無需** 這四個提示,優化器通常更聰明。

2. 去重選項

  • `DISTINCT` / `DISTINCTROW`:結果集去重,**NULL 視為相等** (只保留一個 NULL)。
  • `ALL`:預設行為,保留所有行 (含重複),可省略。

3. 導出文件 (INTO OUTFILE/DUMPFILE)

SELECT * INTO OUTFILE '/tmp/export.csv' 
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'
FROM tbl;
  • 文件生成在 **服務端**,不可覆蓋現有文件。
  • `OUTFILE`:正常換行/分隔;`DUMPFILE`:無任何格式,單行二進制寫入。
  • 需 `FILE` 權限,且受 `secure_file_priv` 目錄限制。

4. 基礎查詢威力 (無 FROM 子句)

SELECT 1 + 1;           -- → 2 (計算器)
SELECT NOW();           -- 當前時間
SELECT @var := 100;     -- 變量賦值
SELECT UUID();          -- 生成 UUID

這是 MySQL 特有能力,常用於應用層借用資料庫函數計算。

常用子句速查

  • WHERE:行級過濾,聚合前執行。
  • GROUP BY:分組聚合,可配合 `WITH ROLLUP` 超級聚合。
  • HAVING:分組後過濾,可用聚合函數。
  • ORDER BY:排序,支援列名、別名、表達式、位置序號。
  • LIMIT:分頁神器,`LIMIT offset, rows` 或 `LIMIT rows OFFSET offset`。

避坑指南

  1. `GROUP BY` 非聚合列必須出現在 SELECT 列表 (ONLY_FULL_GROUP_BY 模式)。
  2. `ORDER BY` 配合 `LIMIT` 做分頁時,大偏移量效能差,建議用「游標/ID 續傳」優化。
  3. `INTO OUTFILE` 導出路徑需 MySQL 進程有寫入權限,且目標文件不能存在。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved