在撰寫 SQL 查詢時,隨著表關聯、計算欄位、函數嵌套越來越多,原始的欄位名稱往往冗長且難以理解。此時,AS 關鍵字(別名)便成為提升程式碼可讀性、簡化後續引用的關鍵工具。本文將從基本語法、欄位別名、表別名、實戰案例四個維度,系統梳理 MySQL 中 AS 的用法與最佳實踐。
-- 欄位別名
SELECT column_name AS alias_name FROM table_name;
-- 表別名
SELECT alias.column_name FROM table_name AS alias;
SELECT name AS n 等同於 SELECT name n,但建議保留 AS 以明確語意。`)或雙引號包裹,如 AS `總庫存`。SELECT、ORDER BY、GROUP BY、HAVING 中可直接使用;不可在 WHERE、JOIN ON 中直接引用(需重寫表達式或使用子查詢)。最常見的場景是對運算結果、函數返回值重新命名,使輸出欄位自帶文檔屬性。
假設有一張 Topic 表,記錄圖書的在庫(InStock)、訂購中(OnOrder)、預留(Reserved)。我們想查詢每本書的「可用庫存」:
SELECT
Name,
InStock + OnOrder - Reserved AS Available
FROM Topic
WHERE Name LIKE '%Java%'
ORDER BY Name;
Available 這個別名瞬間讓業務邏輯清晰可見,且可直接在 ORDER BY Available 中複用。
SELECT
first_name,
start_date,
CURDATE() AS 今日,
(YEAR(CURDATE()) - YEAR(start_date)) - (RIGHT(CURDATE(),5) < RIGHT(start_date,5)) AS YearServed
FROM employee
ORDER BY YearServed;
若無別名,ORDER BY 需重寫整個冗長表達式,維護成本極高。
當查詢涉及多張表,或同一張表自關聯(Self-Join)時,表別名不可或缺。
SELECT O.ID
FROM Employee AS O, Job AS C
WHERE C.ID = O.ID;
O 代表 Employee(Officer/Operator),C 代表 Job(Career/Category)。ID)。SELECT
e1.Name AS 員工,
e2.Name AS 主管
FROM Employee AS e1
LEFT JOIN Employee AS e2 ON e1.ManagerID = e2.ID;
同一張表以 e1、e2 區分角色,邏輯一目瞭然。
SELECT
Department,
COUNT(*) AS 員工數
FROM Employee
GROUP BY Department
HAVING 員工數 > 5;
MySQL 允許在 HAVING 直接使用別名,這在聚合篩選時極為方便。
SELECT t.Available
FROM (
SELECT InStock + OnOrder - Reserved AS Available
FROM Topic
) AS t
WHERE t.Available > 10;
衍生表(子查詢結果集)在 MySQL 中強制要求別名,否則報錯 Every derived table must have its own alias。
如 SELECT name AS order 會導致語法錯誤,需改為 AS `order` 或換用 order_num。
AS 總金額 優於 AS total,AS emp 優於 AS e(團隊協作時)。AS 關鍵字,建議保留以增強可讀性。Employee e、Department d、Order o,關聯條件寫成 e.DeptID = d.ID 瞬間可讀。善用 AS 別名,不僅能讓 SQL 讀起來像敘事文,更能在後期維護、效能調優時快速定位邏輯。下次寫查詢時,請多問一句:「這個欄位、這張表,叫什麼名字最讓同事秒懂?」