在本教學中,您將了解SQL別名,包括表和列別名,以使查詢更短,更易理解。
SQL別名用於在執行查詢期間為表或列分配臨時名稱。 有兩種型別的別名:表別名和列別名。
幾乎所有關聯式資料庫管理系統都支援列別名和表別名。
當我們設計表時,經常將列名稱保持簡短或另起新名稱,例如,銷售訂單號為: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
。
在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別名(包括列別名和表別名)來使查詢更短,更易理解。