摘要:在本教學中,您將學習 SQL 別名,包括表格和欄位別名,以使您的查詢更簡短且更易於理解。
SQL 別名允許您在執行 查詢 時,為表格或欄位指派一個臨時名稱。SQL 有兩種別名:表格別名和欄位別名。
SQL 欄位別名
在設計資料庫表格時,您可能會為了保持欄位名稱簡短而使用縮寫。例如:
so_no
代表銷售訂單編號。qty
代表數量。
或者您可能需要處理舊系統,它們會積極使用縮寫來命名欄位和表格。
例如,SAP ERP 使用縮寫(德文)來命名所有欄位和表格,例如 VBELN
用於命名銷售文件編號欄位。
當您使用 SQL 從這些表格查詢資料時,輸出結果可能不明顯。為了修正這個問題,您可以使用欄位別名,在查詢執行期間為欄位提供臨時名稱。
以下顯示使用欄位別名的語法:
column_name AS alias_name
Code language: SQL (Structured Query Language) (sql)
在這個語法中,您在 AS
關鍵字後面指定欄位別名,然後是欄位名稱。AS
關鍵字是可選的。所以您可以省略它,像這樣:
column_name alias_name
Code language: SQL (Structured Query Language) (sql)
如果別名包含空格,您需要將它放在單引號(或雙引號)內,像這樣:
column_name AS 'Alias Name'
Code language: SQL (Structured Query Language) (sql)
以下範例展示如何使用欄位別名:
SELECT
inv_no AS invoice_no,
amount,
due_date AS 'Due date',
cust_no 'Customer No'
FROM
invoices;
Code language: SQL (Structured Query Language) (sql)
這個查詢有多個欄位別名。
invoice_no
是inv_no
欄位的欄位別名。'Due date'
是due_date
欄位的欄位別名。由於別名包含空格,您必須將它放在單引號 (') 或雙引號 (") 內。'Customer no'
是cust_no
欄位的別名。請注意,它沒有AS
關鍵字。
運算式的別名
如果查詢包含運算式,您可以為運算式指派欄位別名。例如:
SELECT
first_name,
last_name,
salary * 1.1 AS new_salary
FROM
employees;
Code language: SQL (Structured Query Language) (sql)
在這個範例中,資料庫會使用欄位別名作為結果集中運算式的標題。
欄位別名的常見錯誤
由於您在 SELECT
子句中為欄位指派別名,您只能在 SELECT
子句之後評估的子句中引用別名。
以下查詢將導致錯誤:
SELECT
first_name,
last_name,
salary * 1.1 AS new_salary
FROM
employees
WHERE new_salary > 5000
Code language: SQL (Structured Query Language) (sql)
錯誤
Unknown column 'new_salary' in 'where clause'
Code language: JavaScript (javascript)
為什麼?
在這個 SELECT
陳述式中,資料庫會依照以下順序評估子句:
FROM > WHERE > SELECT
Code language: SQL (Structured Query Language) (sql)
資料庫會在 SELECT
子句之前評估 WHERE
子句。因此,在評估 WHERE
子句時,資料庫沒有 new_salary
欄位別名的資訊。所以它發出錯誤。
但是,以下查詢可以正常工作:
SELECT
first_name,
last_name,
salary * 1.1 AS new_salary
FROM
employees
ORDER BY new_salary;
Code language: SQL (Structured Query Language) (sql)
在這個範例中,資料庫會依照以下順序評估查詢的子句:
FROM > SELECT > ORDER BY
Code language: SQL (Structured Query Language) (sql)
資料庫會在 ORDER BY
子句之前評估 SELECT
子句。因此,在評估 ORDER BY
子句時,資料庫擁有 new_salary
別名的資訊,它是運算式 salary * 1.1
的別名。因此,它可以如預期運作。
SQL 表格別名
與欄位一樣,您可以為表格指派別名。這些別名稱為表格別名。
要為表格指派別名,您可以使用以下語法:
table_name AS table_alias
Code language: PHP (php)
在這個語法中,AS
關鍵字也是可選的。所以您可以像下面這樣省略它:
table_name table_alias
Code language: SQL (Structured Query Language) (sql)
請注意,為表格指派別名並不會永久重新命名表格。它只是在執行查詢期間暫時給表格另一個名稱。
那麼為什麼需要表格別名呢?
在 SELECT
子句中指定欄位名稱時,您可以使用以下語法:
table_name.column_name
Code language: CSS (css)
在這個語法中,欄位具有完全限定名稱,包含表格名稱和欄位名稱。例如:
SELECT
employees.first_name,
employees.last_name
FROM
employees;
Code language: SQL (Structured Query Language) (sql)
在這個範例中,查詢從 employees
表格的 first_name
和 last_name
欄位選取資料。與典型的查詢不同,我們為 first_name
和 last_name
欄位指定了完全限定名稱。
在 SELECT
子句中,您可以使用 employees
表格的表格別名,而不是使用 employees
表格名稱。例如:
SELECT
e.first_name,
e.last_name
FROM
employees AS e;
Code language: SQL (Structured Query Language) (sql)
在這個範例中,我們在 FROM
子句中為 employees
指派了 e
表格別名,並在 SELECT
子句中引用它。
但為什麼您需要為欄位使用完全限定名稱呢?
請參閱來自 範例資料庫 的以下 employees
和 departments
表格:

employees
和 departments
表格都有相同名稱的欄位:department_id。
當從這兩個表格查詢資料時,您需要指定 department_id
欄位所屬的確切表格。否則,您會收到錯誤,因為資料庫不知道它需要去哪個表格選取資料。
如果您要從 employees
表格選取資料,您可以在 SELECT
子句中參考它,如下所示:
employees.department_id
Code language: SQL (Structured Query Language) (sql)
相同的也適用於 departments
表格的 department_id
:
departments.department_id
Code language: SQL (Structured Query Language) (sql)
如果 e
和 d
分別是 employees
和 departments
表格的表格別名,您可以使用表格別名在每個表格中參考 department_id
欄位,如下所示:
e.department_id
d.department_id
Code language: SQL (Structured Query Language) (sql)
在下一個教學中,您將學習如何使用 join 子句從兩個表格選取資料並應用表格別名。此外,您將學習如何使用 自連接 技術在單一查詢中兩次參考相同的表格。在這種情況下,您需要使用表格別名。
摘要
- SQL 有兩種別名:欄位別名和表格別名。
- 在
SELECT
子句之後評估的子句中參考欄位別名。 - 使用表格別名來限定欄位名稱。