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]]
*:依建表順序所有欄位。AS 別名:col AS alias。COUNT, SUM, AVG, MAX, MIN, STD, BIT_OR, BIT_AND 等。SELECT t1.name, t2.salary
FROM employee AS t1, info AS t2
WHERE t1.name = t2.name;
別名不可數字開頭,後續 WHERE/HAVING 必須使用別名。
| 運算子/關鍵字 | 說明 |
|---|---|
=, <>, !=, >, <, >=, <= | 比較運算子,字串比較依字元集排序,尾部空格忽略 |
BETWEEN ... AND ... | 範圍查詢,含邊界 |
IN (val1, val2...) | 集合包含 |
LIKE | 模糊比對,% 多字元、_ 單字元,亦可用於數值/日期 |
IS NULL / IS NOT NULL | 空值判斷 |
AND / OR / NOT | 邏輯組合,AND 優先於 OR,可用括號改變順序 |
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 擴充)。ASC 升序,DESC 降序。LIMIT 5 -- 前 5 筆 (offset=0)
LIMIT 0, 5 -- 同上
LIMIT 10, 20 -- 跳過 10 筆,取 20 筆
OUTFILE:每列換行,欄位依 export_options 格式。DUMPFILE:僅寫入單行原始資料,無格式化。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-%' 避開秒/毫秒干擾。