SQL別名

在本教程中,您將瞭解SQL別名,包括表和列別名,以使查詢更短,更易理解。

1. SQL別名簡介

SQL別名用於在執行查詢期間爲表或列分配臨時名稱。 有兩種類型的別名:表別名和列別名。
幾乎所有關係數據庫管理系統都支持列別名和表別名。
SQL別名

1.1. 列別名

當我們設計表時,經常將列名稱保持簡短或另起新名稱,例如,銷售訂單號爲:so_no,發票號碼爲:inv_no。在使用SELECT語句從表中查詢數據返回輸出時不具有描述性。

要在查詢中爲列指定新名稱,請使用列別名。 列別名只是執行查詢期間列的臨時名稱。

請參閱以下查詢:

SELECT
    inv_no AS invoice_no,
    amount,
    due_date AS '截止日期',
    cust_no '客戶編號'
FROM
    invoices;
  • invoice_noinv_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;

執行上面示例代碼,得到以下結果 -

SQL別名

HAVING子句中,我們不是引用表達式count(employee_id),而是引用列別名headcount

1.2. 表別名

SELECT語句中臨時爲表分配一個不同的名稱。這個表的新名稱稱爲表別名。 表別名也稱爲相關名稱。

請注意,分配別名實際上並不重命名錶。 它只是在執行查詢時爲表提供另一個名稱。

在實踐中,我們保持表別名簡短且易於理解。 例如,e代表員工,d代表部門,j代表職位,l代表位置。

那麼爲什麼必須使用表別名呢?

第一個原因:使用表別名的是節省輸入冗長名稱的時間並使查詢更容易理解。 請參閱以下查詢:

SELECT 
    d.department_name
FROM
    departments AS d

ddepartments表的表別名。 AS關鍵字是可選的,因此可以省略它。

departments表具有別名d時,您可以使用別名d來引用該表。

例如,d.department_name引用departments表的department_name字段。 如果不使用表別名,則必須使用departments.department_name來引用更長的department_name字段。

第二個原因:使用表別名,希望在單個查詢中多次引用同一個表。例如經常在內聯接,左聯接和自聯接中找到此類查詢。

以下查詢使用inner join子句從employeesdepartments表中選擇數據。

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-joinemployee表自聯接。

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表在查詢中出現兩次,所以需要使用兩個表別名:em; e代表員工,而m代表經理。

在本教程中,您學習瞭如何使用SQL別名(包括列別名和表別名)來使查詢更短,更易理解。