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

        原文作者:SQL教程
        原文地址: https://www.yiibai.com/sql/sql-alias.html
        本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
    点赞