SELECT 語句是 SQL 中最基礎也最重要的資料檢索指令,用於從一個或多個資料表中擷取特定資料列。其完整語法包含多個選用子句,執行順序固定,不可隨意調換:
SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY]
[DISTINCT | DISTINCTROW | ALL]
select_expression, ...
[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] ]
SELECT 不僅能查詢資料表,也能直接進行純量運算:
mysql> SELECT 1 + 1;
-> 2
使用 AS 為運算式指定別名,別名可用於 ORDER BY、GROUP BY、HAVING 子句:
SELECT CONCAT(last_name, ', ', first_name) AS full_name
FROM mytable ORDER BY full_name;
ORDER BY 和 GROUP BY 也支援以欄位位置(從 1 起算)引用:
SELECT college, region, seed FROM tournament ORDER BY 2, 3;
FROM 子句指定資料來源,多個資料表即為聯結。資料表可用 tbl_name [AS] alias_name 設定別名,簡化欄位引用:
SELECT t1.name, t2.salary
FROM employee AS t1, info AS t2
WHERE t1.name = t2.name;
ORDER BY 預設遞增(ASC),加上 DESC 關鍵字可遞減排序:
SELECT * FROM products ORDER BY price DESC;
HAVING 用於過濾分組後的彙總結果,執行於查詢最後階段;WHERE 則在分組前過濾原始資料列。錯誤範例:
-- 錯誤:HAVING 不應用於非彙總條件
SELECT col_name FROM tbl_name HAVING col_name > 0;
-- 正確:改用 WHERE
SELECT col_name FROM tbl_name WHERE col_name > 0;
正確用法:搭配彙總函數
SELECT user, MAX(salary) FROM users
GROUP BY user HAVING MAX(salary) > 10;
限制回傳資料列數,支援一或兩個參數:
-- 取第 6-15 筆(偏移量 5,取 10 筆)
SELECT * FROM table LIMIT 5,10;
-- 取前 5 筆
SELECT * FROM table LIMIT 5;
SELECT ... INTO OUTFILE 'file_name' 將結果寫入伺服器端檔案,檔案不可預存。INTO DUMPFILE 僅寫入單行無格式資料,適合儲存 BLOB。