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_NameProduct_NameQuantity
張一滑鼠1000
王二螢幕2000
李三印表機500
陳四螢幕1500

範例: 為查詢結果的欄位設定更易懂的別名。

SELECT
    Customer_Name AS Customer,
    Product_Name AS Product,
    Quantity
FROM orders;

結果:

CustomerProductQuantity
張一滑鼠1000
王二螢幕2000
李三印表機500
陳四螢幕1500

注意:返回結果的欄位名稱變成了別名。

計算欄位使用別名

當使用聚合函數或表達式時,為結果欄位設定別名特別有用:

SELECT
    Product_Name AS Product,
    SUM(Quantity) AS TotalQuantity,
    AVG(Quantity) AS AverageQuantity
FROM orders
GROUP BY Product_Name;

結果:

ProductTotalQuantityAverageQuantity
滑鼠10001000
螢幕35001750
印表機500500

如果不使用別名,聚合函數的結果欄位名稱會是 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 子句中通常不能使用,因為 WHERESELECT 之前執行。

-- 這個查詢在大多數資料庫中會報錯
SELECT
    Quantity * 10 AS TotalPrice
FROM orders
WHERE TotalPrice > 5000;  -- 錯誤:無法識別 TotalPrice

-- 正確寫法
SELECT
    Quantity * 10 AS TotalPrice
FROM orders
WHERE Quantity * 10 > 5000;  -- 使用原始表達式

最佳實踐

  1. 保持一致性:在同一個專案中,統一使用或不使用 AS 關鍵字。
  2. 有意義的別名:選擇清晰、描述性的別名。
  3. 簡短但不失意義:表別名通常使用 1-3 個字元 (如 c 代表 customers)。
  4. 避免與關鍵字衝突:別名不應與 SQL 關鍵字相同。