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]
| 關鍵字 | 作用 | 適用場景 |
|---|---|---|
| STRAIGHT_JOIN | 強制按 FROM 順序聯表 | 優化器選錯聯表順序時 |
| SQL_SMALL_RESULT | 結果集較小,使用臨時表 | GROUP BY/DISTINCT 結果集小 |
| SQL_BIG_RESULT | 結果集較大,使用磁盤排序 | GROUP BY/DISTINCT 結果集大 |
| HIGH_PRIORITY | 提升查詢優先級高於寫操作 | 關鍵實時查詢 |
| 操作符 | 說明 |
|---|---|
| =, >, <, >=, <=, !=, <> | 比較運算符 |
| BETWEEN ... AND ... | 範圍查詢(含邊界) |
| IN (val1, val2...) | 集合匹配 |
| LIKE 'pattern' | 模糊匹配,% 多字符,_ 單字符 |
| IS [NOT] NULL | 空值判斷 |
| AND / OR / NOT | 邏輯組合,AND 優先級高於 OR |
字符比較規則:忽略尾部空格,大小寫敏感度取決於字符集校對規則。
日期比較建議:使用 LIKE '2024-01-%' 而非精確等值,避免時間部分干擾。
GROUP BY col1, col2:按列分組,配合聚合函數HAVING:過濾分組結果,可引用聚合列別名WITH ROLLUP:生成超級聚合行(MySQL 擴展)ASC(默認升序)/ DESC(降序)ORDER BY dept ASC, salary DESCLIMIT n:前 n 行(等價 LIMIT 0, n)LIMIT offset, n:跳過 offset 行取 n 行,offset 從 0 開始LIMIT 100000, 10 需掃描 10 萬行SELECT id, name FROM users WHERE status=1 若有 INDEX(status, id, name) 可避免回表熟練掌握 SELECT 全語法,結合 EXPLAIN 分析執行計劃,是編寫高性能查詢的基礎。