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_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;

執行上面範例程式碼,得到以下結果 -

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別名(包括列別名和表別名)來使查詢更短,更易理解。