• 技术文章 >数据库 >mysql教程

    mysql中as的用法是什么

    青灯夜游青灯夜游2022-01-06 16:02:38原创152

    在mysql中,“as”关键字用于为数据表和字段指定别名,语法:1、“SELECT 字段名 AS 别名 FROM 数据表;”,可为字段指定别名;2、“SELECT 字段名 FROM 数据表 AS 别名;”,可为表指定别名。

    本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

    为了查询方便,MySQL 提供了 AS 关键字来为表和字段指定别名。本节主要讲解如何为表和字段指定一个别名。

    在使用 MySQL查询时,当表名很长或者执行一些特殊查询的时候,为了方便操作或者需要多次使用相同的表时,可以为表指定别名,用这个别名代替表原来的名称。

    为字段指定别名

    有时,列的名称是一些表达式,使查询的输出很难理解。要给列一个描述性名称,可以使用列别名。

    以下语句说明了如何使用列别名:

    SELECT 
     字段名 AS 别名
    FROM 数据表;

    要给字段添加别名,可以使用AS关键词后跟别名。 如果别名包含空格,则必须引用以下内容:

    SELECT 
     字段名 AS `别名`
    FROM 数据表;

    因为AS关键字是可选的,可以在语句中省略它。 请注意,还可以在表达式上使用别名。

    我们来看看示例数据库中的employees表,其表结构如下所示 -

    mysql> desc employees;
    +----------------+--------------+------+-----+---------+-------+
    | Field          | Type         | Null | Key | Default | Extra |
    +----------------+--------------+------+-----+---------+-------+
    | employeeNumber | int(11)      | NO   | PRI | NULL    |       |
    | lastName       | varchar(50)  | NO   |     | NULL    |       |
    | firstName      | varchar(50)  | NO   |     | NULL    |       |
    | extension      | varchar(10)  | NO   |     | NULL    |       |
    | email          | varchar(100) | NO   |     | NULL    |       |
    | officeCode     | varchar(10)  | NO   | MUL | NULL    |       |
    | reportsTo      | int(11)      | YES  | MUL | NULL    |       |
    | jobTitle       | varchar(50)  | NO   |     | NULL    |       |
    +----------------+--------------+------+-----+---------+-------+
    8 rows in set

    以下查询选择员工的名字和姓氏,并将其组合起来生成全名。 CONCAT_WS函数用于连接名字和姓氏。

    SELECT 
        CONCAT_WS(', ', lastName, firstname)
    FROM
        employees;

    执行上面代码,得到以下结果 -

    mysql> SELECT 
        CONCAT_WS(', ', lastName, firstname)
    FROM
        employees;
    +--------------------------------------+
    | CONCAT_WS(', ', lastName, firstname) |
    +--------------------------------------+
    | Murphy, Diane                        |
    | Patterson, Mary                      |
    | Firrelli, Jeff                       |
    | Patterson, William                   |
    | Bondur, Gerard                       |
    | Bow, Anthony                         |
    | Jennings, Leslie                     |
    | Thompson, Leslie                     |
    | Firrelli, Julie                      |
    | Patterson, Steve                     |
    | Tseng, Foon Yue                      |
    | Vanauf, George                       |
    | Bondur, Loui                         |
    | Hernandez, Gerard                    |
    | Castillo, Pamela                     |
    | Bott, Larry                          |
    | Jones, Barry                         |
    | Fixter, Andy                         |
    | Marsh, Peter                         |
    | King, Tom                            |
    | Nishi, Mami                          |
    | Kato, Yoshimi                        |
    | Gerard, Martin                       |
    +--------------------------------------+
    23 rows in set

    在上面示例中,列标题很难阅读理解。可以为输出的标题分配一个有意义的列别名,以使其更可读,如以下查询:

    SELECT
     CONCAT_WS(', ', lastName, firstname) AS `Full name`
    FROM
     employees;

    执行上面代码,得到以下结果 -

    mysql> SELECT
     CONCAT_WS(', ', lastName, firstname) AS `Full name`
    FROM
     employees;
    +--------------------+
    | Full name          |
    +--------------------+
    | Murphy, Diane      |
    | Patterson, Mary    |
    | Firrelli, Jeff     |
    ... ...
    | King, Tom          |
    | Nishi, Mami        |
    | Kato, Yoshimi      |
    | Gerard, Martin     |
    +--------------------+
    23 rows in set

    在MySQL中,可以使用ORDER BYGROUP BYHAVING子句中的列别名来引用该列。

    以下查询使用ORDER BY子句中的列别名按字母顺序排列员工的全名:

    SELECT
     CONCAT_WS(' ', lastName, firstname) `Full name`
    FROM
     employees
    ORDER BY
     `Full name`;

    执行上面代码,得到以下结果 -

    mysql> SELECT
     CONCAT_WS(' ', lastName, firstname) `Full name`
    FROM
     employees
    ORDER BY
     `Full name`;
    +-------------------+
    | Full name         |
    +-------------------+
    | Bondur Gerard     |
    | Bondur Loui       |
    | Bott Larry        |
    | Bow Anthony       |
    | Castillo Pamela   |
    | Firrelli Jeff     |
    | Firrelli Julie    |
    | Fixter Andy       |
    | Gerard Martin     |
    | Hernandez Gerard  |
    | Jennings Leslie   |
    | Jones Barry       |
    | Kato Yoshimi      |
    | King Tom          |
    | Marsh Peter       |
    | Murphy Diane      |
    | Nishi Mami        |
    | Patterson Mary    |
    | Patterson Steve   |
    | Patterson William |
    | Thompson Leslie   |
    | Tseng Foon Yue    |
    | Vanauf George     |
    +-------------------+
    23 rows in set

    以下语句查询总金额大于60000的订单。它在GROUP BYHAVING子句中使用列别名。

    SELECT
     orderNumber `Order no.`,
     SUM(priceEach * quantityOrdered) total
    FROM
     orderdetails
    GROUP BY
     `Order no.`
    HAVING
     total > 60000;

    执行上面查询语句,得到以下结果 -

    mysql> SELECT
     orderNumber `Order no.`,
     SUM(priceEach * quantityOrdered) total
    FROM
     orderdetails
    GROUP BY
     `Order no.`
    HAVING
     total > 60000;
    +-----------+----------+
    | Order no. | total    |
    +-----------+----------+
    |     10165 | 67392.85 |
    |     10287 | 61402.00 |
    |     10310 | 61234.67 |
    +-----------+----------+
    3 rows in set

    请注意,不能在WHERE子句中使用列别名。原因是当MySQL评估求值WHERE子句时,SELECT子句中指定的列的值可能尚未确定。

    为表指定别名

    可以使用别名为表添加不同的名称。使用AS关键字在表名称分配别名,如下查询语句语法:

    SELECT 字段名 FROM 数据表 AS 别名;

    该表的别名称为表别名。像列别名一样,AS关键字是可选的,所以完全可以省略它。

    一般在包含INNER JOINLEFT JOINself join子句和子查询的语句中使用表别名。

    下面来看看客户(customers)和订单(orders)表,它们的ER图如下所示 -

    1.png

    两个表都具有相同的列名称:customerNumber。如果不使用表别名来指定是哪个表中的customerNumber列,则执行查询时将收到类似以下错误消息:

    Error Code: 1052. Column 'customerNumber' in on clause is ambiguous

    为避免此错误,应该使用表别名来限定customerNumber列:

    SELECT
     customerName,
     COUNT(o.orderNumber) total
    FROM
     customers c
    INNER JOIN orders o ON c.customerNumber = o.customerNumber
    GROUP BY
     customerName
    HAVING total >=5
    ORDER BY
     total DESC;

    执行上面查询语句,得到以下结果 -

    mysql> SELECT
     customerName,
     COUNT(o.orderNumber) total
    FROM
     customers c
    INNER JOIN orders o ON c.customerNumber = o.customerNumber
    GROUP BY
     customerName
    HAVING total >=5
    ORDER BY
     total DESC;
    +------------------------------+-------+
    | customerName                 | total |
    +------------------------------+-------+
    | Euro+ Shopping Channel       |    26 |
    | Mini Gifts Distributors Ltd. |    17 |
    | Reims Collectables           |     5 |
    | Down Under Souveniers, Inc   |     5 |
    | Danish Wholesale Imports     |     5 |
    | Australian Collectors, Co.   |     5 |
    | Dragon Souveniers, Ltd.      |     5 |
    +------------------------------+-------+
    7 rows in set

    上面的查询从客户(customers)和订单(orders)表中选择客户名称和订单数量。 它使用c作为customers表的表别名,o作为orders表的表别名。customersorders表中的列通过表别名(co)引用。

    如果您不在上述查询中使用别名,则必须使用表名称来引用其列,这样的会使得查询冗长且可读性较低,如下 -

    SELECT
     customers.customerName,
     COUNT(orders.orderNumber) total
    FROM
     customers
    INNER JOIN orders ON customers.customerNumber = orders.customerNumber
    GROUP BY
     customerName
    ORDER BY
     total DESC

    【相关推荐:mysql视频教程

    以上就是mysql中as的用法是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:mysql as
    上一篇:mysql中“=”是什么意思 下一篇:mysql要如何删数据库

    相关文章推荐

    • mysql如何设置大小写不敏感• mysql中的不等于符号是什么• mysql需要配置环境变量吗• mysql怎么实现除法保留两位小数• mysql内连接和外连接有什么区别

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网