SELECT [STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] [HIGH_PRIORITY]
[DISTINCT | DISTINCTROW | ALL]
select_expr, ...
[INTO {OUTFILE | DUMPFILE} 'file_name' export_options]
[FROM table_references
[WHERE where_condition]
[GROUP BY {col_name | expr | position} [ASC | DESC], ...]
[HAVING where_condition]
[ORDER BY {col_name | expr | position} [ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[FOR UPDATE | LOCK IN SHARE MODE]]
FROM / JOIN → 確定資料來源WHERE → 列級過濾GROUP BY → 分組彙總HAVING → 群組過濾SELECT → 選取輸出欄位DISTINCT → 去重ORDER BY → 排序LIMIT → 限制筆數注意:WHERE 不可使用欄位別名,HAVING 與 ORDER BY 可使用。
SELECT CONCAT(last_name, ', ', first_name) AS full_name
FROM employees
ORDER BY full_name;
SELECT * FROM orders USE INDEX (idx_customer_id)
WHERE customer_id = 123;
若 EXPLAIN 顯示用錯索引,可用 USE INDEX、IGNORE INDEX、FORCE INDEX 強制指定。
SELECT * FROM articles ORDER BY created_at DESC LIMIT 10 OFFSET 20; -- 第 3 頁,每頁 10 筆
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name, ...)]
{VALUES | VALUE} (value_list), ...
[ON DUPLICATE KEY UPDATE col_name=expr, ...]
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name = expr, ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
UPDATE/DELETE 加上 WHERE,避免誤傷全表;TRUNCATE 或分批 DELETE ... LIMIT 1000;INSERT ... ON DUPLICATE KEY UPDATE 可替代 REPLACE INTO,避免主鍵刪除重建導致自增 ID 跳躍。