• SQL表和列别名


    在本教程中,您将了解SQL别名,包括表和列别名,以使查询更短,更易理解。

    1. SQL别名简介

    SQL别名用于在执行查询期间为表或列分配临时名称。 有两种类型的别名:表别名和列别名。
    几乎所有关系数据库管理系统都支持列别名和表别名。

    1.1. 列别名

    当我们设计表时,经常将列名称保持简短或另起新名称,例如,销售订单号为:so_no,发票号码为:inv_no。在使用SELECT语句从表中查询数据返回输出时不具有描述性。

    要在查询中为列指定新名称,请使用列别名。 列别名只是执行查询期间列的临时名称。更多教程请访问http://www.manongzj.com

    请参阅以下查询:

    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表在查询中出现两次,所以需要使用两个表别名:eme代表员工,而m代表经理。

    在本教程中,您学习了如何使用SQL别名(包括列别名和表别名)来使查询更短,更易理解。

  • 相关阅读:
    latch与DFF
    数字逻辑综合DC脚本示例及解释
    当DiscuzNT遇上了Loadrunner(下)
    [C#学习]在多线程中如何调用Winform
    并发性测试工具
    当DiscuzNT遇上了Loadrunner(上)
    大型网站(高访问、海量数据)技术架构
    Load Runner下载
    Invoke 和 BeginInvoke 的真正涵义
    当DiscuzNT遇上了Loadrunner(中)
  • 原文地址:https://www.cnblogs.com/myhomepages/p/15827027.html
Copyright © 2020-2023  润新知