SQL 別名

摘要:在本教學中,您將學習 SQL 別名,包括表格和欄位別名,以使您的查詢更簡短且更易於理解。

SQL 別名允許您在執行 查詢 時,為表格或欄位指派一個臨時名稱。SQL 有兩種別名:表格別名和欄位別名。

SQL 欄位別名

在設計資料庫表格時,您可能會為了保持欄位名稱簡短而使用縮寫。例如:

  • so_no 代表銷售訂單編號。
  • qty 代表數量。

或者您可能需要處理舊系統,它們會積極使用縮寫來命名欄位和表格。

例如,SAP ERP 使用縮寫(德文)來命名所有欄位和表格,例如 VBELN 用於命名銷售文件編號欄位。

當您使用 SQL 從這些表格查詢資料時,輸出結果可能不明顯。為了修正這個問題,您可以使用欄位別名,在查詢執行期間為欄位提供臨時名稱。

以下顯示使用欄位別名的語法:

column_name AS alias_nameCode language: SQL (Structured Query Language) (sql)

在這個語法中,您在 AS 關鍵字後面指定欄位別名,然後是欄位名稱。AS 關鍵字是可選的。所以您可以省略它,像這樣:

column_name alias_nameCode 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_noinv_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 > 5000Code language: SQL (Structured Query Language) (sql)

錯誤

Unknown column 'new_salary' in 'where clause'Code language: JavaScript (javascript)

為什麼?

在這個 SELECT 陳述式中,資料庫會依照以下順序評估子句:

FROM > WHERE > SELECTCode 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 BYCode language: SQL (Structured Query Language) (sql)

資料庫會在 ORDER BY 子句之前評估 SELECT 子句。因此,在評估 ORDER BY 子句時,資料庫擁有 new_salary 別名的資訊,它是運算式 salary * 1.1 的別名。因此,它可以如預期運作。

SQL 表格別名

與欄位一樣,您可以為表格指派別名。這些別名稱為表格別名。

要為表格指派別名,您可以使用以下語法:

table_name AS table_aliasCode language: PHP (php)

在這個語法中,AS 關鍵字也是可選的。所以您可以像下面這樣省略它:

table_name table_aliasCode language: SQL (Structured Query Language) (sql)

請注意,為表格指派別名並不會永久重新命名表格。它只是在執行查詢期間暫時給表格另一個名稱。

那麼為什麼需要表格別名呢?

SELECT 子句中指定欄位名稱時,您可以使用以下語法:

table_name.column_nameCode language: CSS (css)

在這個語法中,欄位具有完全限定名稱,包含表格名稱和欄位名稱。例如:

SELECT 
    employees.first_name, 
    employees.last_name
FROM
    employees;Code language: SQL (Structured Query Language) (sql)

在這個範例中,查詢從 employees 表格的 first_namelast_name 欄位選取資料。與典型的查詢不同,我們為 first_namelast_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 子句中引用它。

但為什麼您需要為欄位使用完全限定名稱呢?

請參閱來自 範例資料庫 的以下 employeesdepartments 表格:

Employees & Departments Tables

employeesdepartments 表格都有相同名稱的欄位:department_id。

當從這兩個表格查詢資料時,您需要指定 department_id 欄位所屬的確切表格。否則,您會收到錯誤,因為資料庫不知道它需要去哪個表格選取資料。

如果您要從 employees 表格選取資料,您可以在 SELECT 子句中參考它,如下所示:

employees.department_idCode language: SQL (Structured Query Language) (sql)

相同的也適用於 departments 表格的 department_id

departments.department_idCode language: SQL (Structured Query Language) (sql)

如果 ed 分別是 employeesdepartments 表格的表格別名,您可以使用表格別名在每個表格中參考 department_id 欄位,如下所示:

e.department_id
d.department_idCode language: SQL (Structured Query Language) (sql)

在下一個教學中,您將學習如何使用 join 子句從兩個表格選取資料並應用表格別名。此外,您將學習如何使用 自連接 技術在單一查詢中兩次參考相同的表格。在這種情況下,您需要使用表格別名。

摘要

  • SQL 有兩種別名:欄位別名和表格別名。
  • SELECT 子句之後評估的子句中參考欄位別名。
  • 使用表格別名來限定欄位名稱。
這個教學對您有幫助嗎?