AS (Alias 別名) (SQL Alias)
在 SQL 中,我們可以使用 AS 關鍵字為資料表或欄位取一個暫時的「別名 (Alias)」。別名只在該查詢的執行期間有效,不會改變資料庫中實際的資料表或欄位名稱。
使用別名的好處:
- 讓複雜的 SQL 查詢語句更易讀
- 讓查詢結果的欄位名稱更直觀
- 簡化長名稱的資料表或欄位
- 在 Self Join 中區分同一張表的不同引用
欄位別名語法 (Column Alias Syntax)
SELECT column_name AS alias_name
FROM table_name;
AS 關鍵字是可選的,也可以直接用空格分隔:
SELECT column_name alias_name
FROM table_name;
如果別名包含空格或特殊字元,需要用引號 (或方括號) 包裹:
SELECT column_name AS "Alias Name" -- 標準 SQL
SELECT column_name AS [Alias Name] -- SQL Server
SELECT column_name AS `Alias Name` -- MySQL
資料表別名語法 (Table Alias Syntax)
SELECT column1, column2
FROM table_name AS alias_name;
或省略 AS:
SELECT column1, column2
FROM table_name alias_name;
欄位別名範例 (Column Alias Example)
orders 資料表:
| Customer_Name | Product_Name | Quantity |
|---|---|---|
| 張一 | 滑鼠 | 1000 |
| 王二 | 螢幕 | 2000 |
| 李三 | 印表機 | 500 |
| 陳四 | 螢幕 | 1500 |
範例: 為查詢結果的欄位設定更易懂的別名。
SELECT
Customer_Name AS Customer,
Product_Name AS Product,
Quantity
FROM orders;
結果:
| Customer | Product | Quantity |
|---|---|---|
| 張一 | 滑鼠 | 1000 |
| 王二 | 螢幕 | 2000 |
| 李三 | 印表機 | 500 |
| 陳四 | 螢幕 | 1500 |
注意:返回結果的欄位名稱變成了別名。
計算欄位使用別名
當使用聚合函數或表達式時,為結果欄位設定別名特別有用:
SELECT
Product_Name AS Product,
SUM(Quantity) AS TotalQuantity,
AVG(Quantity) AS AverageQuantity
FROM orders
GROUP BY Product_Name;
結果:
| Product | TotalQuantity | AverageQuantity |
|---|---|---|
| 滑鼠 | 1000 | 1000 |
| 螢幕 | 3500 | 1750 |
| 印表機 | 500 | 500 |
如果不使用別名,聚合函數的結果欄位名稱會是 SUM(Quantity) 或類似的格式,較不直觀。
資料表別名範例 (Table Alias Example)
資料表別名在以下情況特別有用:
1. 簡化長表名
SELECT o.Product_Name, o.Quantity
FROM orders AS o
WHERE o.Quantity > 500;
2. 多表查詢
當查詢涉及多個資料表時,使用別名可以清楚地標示欄位來自哪個表:
SELECT
c.Name,
o.Order_No,
o.Amount
FROM customers AS c
INNER JOIN orders AS o ON c.C_Id = o.C_Id;
3. Self Join (必要情況)
在 Self Join 中,別名是必要的,用來區分同一張表的兩個不同引用:
SELECT
e.name AS Employee,
m.name AS Manager
FROM employees AS e
LEFT JOIN employees AS m ON e.manager_id = m.employee_id;
在其他子句中使用別名
在 ORDER BY 中使用別名
欄位別名可以在 ORDER BY 子句中使用:
SELECT
Product_Name AS Product,
SUM(Quantity) AS Total
FROM orders
GROUP BY Product_Name
ORDER BY Total DESC; -- 可以使用別名
在 HAVING 中使用別名 (依資料庫而定)
SELECT
Product_Name AS Product,
SUM(Quantity) AS Total
FROM orders
GROUP BY Product_Name
HAVING Total > 1000; -- MySQL 支援,但其他資料庫可能不支援
⚠️ 注意: 別名在
WHERE子句中通常不能使用,因為WHERE在SELECT之前執行。
-- 這個查詢在大多數資料庫中會報錯
SELECT
Quantity * 10 AS TotalPrice
FROM orders
WHERE TotalPrice > 5000; -- 錯誤:無法識別 TotalPrice
-- 正確寫法
SELECT
Quantity * 10 AS TotalPrice
FROM orders
WHERE Quantity * 10 > 5000; -- 使用原始表達式
最佳實踐
- 保持一致性:在同一個專案中,統一使用或不使用
AS關鍵字。 - 有意義的別名:選擇清晰、描述性的別名。
- 簡短但不失意義:表別名通常使用 1-3 個字元 (如
c代表customers)。 - 避免與關鍵字衝突:別名不應與 SQL 關鍵字相同。