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 {unsigned_integer | col_name | formula} [ASC | DESC],...]
[LIMIT [offset,] rows] [PROCEDURE procedure_name]]
GROUP BY 或 DISTINCT 使用,提示優化器結果集大小,決定是用臨時表或排序。實務上大多數情況不需使用上述四關鍵字,交由優化器自行判斷即可。
NULL 值視為相同。將結果寫入伺服器端檔案,檔案不可預先存在。OUTFILE 保留欄位/列結尾符,DUMPFILE 僅寫入單行原始資料。
*:依 CREATE TABLE 順序的所有欄位。column_name AS alias。COUNT、SUM 等)。指定查詢來源資料表,多表以逗號分隔。可使用 tbl_name [AS] alias_name 定義別名,後續 WHERE、HAVING 必須引用別名,別名不可數字開頭。
基本語法:[NOT] expression comparison_operator expression、[NOT] expression [NOT] LIKE "pattern"、[NOT] expression IS [NOT] NULL、[NOT] expression [NOT] BETWEEN expr1 AND expr2、[NOT] col_name join_operator col_name、[NOT] boolean_expression。
| 符號 | 意義 |
|---|---|
| = | 等於 |
| > | 大於 |
| < | 小於 |
| >= | 大於等於 |
| <= | 小於等於 |
| != / <> | 不等於 |
字串比較依字典序,忽略尾部空格;日期比較 < 表較早,> 表較晚;字元與日期類型必須加引號。
%:任意長度字串(含零字元)_:單一字元查詢 DATETIME 建議用 LIKE 避免秒/毫秒差異導致比對失敗。
AND 優先於 OR,可用括號改變順序。
GROUP BY 依指定欄位分組,搭配聚合函數(AVG、COUNT、MAX、MIN、SUM)產生摘要列。HAVING 針對分組後的聚合結果篩選,語法同 WHERE 但可使用聚合函數。ALL 關鍵字(Transact-SQL 擴展)可保留被 WHERE 排除的分組。可用欄位名、別名或位置編號(不建議)。ASC 升序(預設),DESC 降序。
LIMIT n:前 n 筆。LIMIT offset, n:略過 offset 筆,取 n 筆(offset 從 0 起算)。EXPLAIN 分析執行計畫,確認索引使用情況。SELECT *,僅取必要欄位減少網路傳輸。LIMIT 深分頁效能。