SQL別名
在本教程中,您將瞭解SQL別名,包括表和列別名,以使查詢更短,更易理解。
1. SQL別名簡介
SQL別名用於在執行查詢期間爲表或列分配臨時名稱。 有兩種類型的別名:表別名和列別名。
幾乎所有關係數據庫管理系統都支持列別名和表別名。
1.1. 列別名
當我們設計表時,經常將列名稱保持簡短或另起新名稱,例如,銷售訂單號爲:so_no
,發票號碼爲:inv_no
。在使用SELECT
語句從表中查詢數據返回輸出時不具有描述性。
要在查詢中爲列指定新名稱,請使用列別名。 列別名只是執行查詢期間列的臨時名稱。
請參閱以下查詢:
SELECT
inv_no AS invoice_no,
amount,
due_date AS '截止日期',
cust_no '客戶編號'
FROM
invoices;
-
invoice_no
是inv_no
列的別名 -
'Due date'
是due_date
列的列別名。 因爲別名包含空格,所以必須使用單引號('
)或雙引號("
)來包圍別名。 -
'Customer no'
是cust_no
列的別名。注意這裏沒有使用AS
關鍵字。AS
關鍵字是可選的,因此可以省略它。
我們經常對選擇列表中的表達式使用列別名。 例如,以下查詢使用headcount
作爲返回僱員數量的表達式的列別名:
SELECT
count(employee_id) headcount
FROM
employees;
執行上面示例代碼,得到以下結果 -
mysql> SELECT
count(employee_id) headcount
FROM
employees;
+-----------+
| headcount |
+-----------+
| 40 |
+-----------+
1 row in set
可以在SELECT
子句之後評估的任何子句中使用列別名,例如HAVING子句。 請參閱以下示例:
SELECT
department_id,
count(employee_id) headcount
FROM
employees
GROUP BY
department_id
HAVING
headcount >= 5;
執行上面示例代碼,得到以下結果 -
在HAVING
子句中,我們不是引用表達式count(employee_id)
,而是引用列別名headcount
。
1.2. 表別名
在SELECT
語句中臨時爲表分配一個不同的名稱。這個表的新名稱稱爲表別名。 表別名也稱爲相關名稱。
請注意,分配別名實際上並不重命名錶。 它只是在執行查詢時爲表提供另一個名稱。
在實踐中,我們保持表別名簡短且易於理解。 例如,e
代表員工,d
代表部門,j
代表職位,l
代表位置。
那麼爲什麼必須使用表別名呢?
第一個原因:使用表別名的是節省輸入冗長名稱的時間並使查詢更容易理解。 請參閱以下查詢:
SELECT
d.department_name
FROM
departments AS d
d
是departments
表的表別名。 AS
關鍵字是可選的,因此可以省略它。
當departments
表具有別名d
時,您可以使用別名d
來引用該表。
例如,d.department_name
引用departments
表的department_name
字段。 如果不使用表別名,則必須使用departments.department_name
來引用更長的department_name
字段。
第二個原因:使用表別名,希望在單個查詢中多次引用同一個表。例如經常在內聯接,左聯接和自聯接中找到此類查詢。
以下查詢使用inner join
子句從employees
和departments
表中選擇數據。
SELECT
employee_id,
first_name,
last_name,
department_name
FROM
employees
INNER JOIN departments ON department_id = department_id
ORDER BY
first_name;
執行上面查詢語句後,數據庫系統將發出錯誤:
Column 'department_id' in on clause is ambiguous
要避免這個錯誤,需要使用表名限定列,如下所示:
SELECT
employee_id,
first_name,
last_name,
employees.department_id,
department_name
FROM
employees
INNER JOIN departments ON departments.department_id = employees.department_id
ORDER BY
first_name;
要使查詢更短,可以使用表別名,例如,e
表示employees
表,d
表示departments
表,如下面的查詢:
SELECT
employee_id,
first_name,
last_name,
e.department_id,
department_name
FROM
employees e
INNER JOIN departments d ON d.department_id = e.department_id
ORDER BY
first_name;
以下查詢使用self-join
將employee
表自聯接。
SELECT
e.first_name AS employee,
m.first_name AS manager
FROM
employees e
LEFT JOIN employees m ON m.employee_id = e.manager_id
ORDER BY
manager;
因爲employees
表在查詢中出現兩次,所以需要使用兩個表別名:e
和m
; e
代表員工,而m
代表經理。
在本教程中,您學習瞭如何使用SQL別名(包括列別名和表別名)來使查詢更短,更易理解。