MySQL 别名

简介:在本教程中,您将学习如何使用MySQL别名来提高查询的可读性。

MySQL支持两种别名,称为列别名和表别名。让我们详细检查每种别名。

MySQL 列别名

有时列的名称是不太好理解和记忆的,使得查询的输出很难理解。要为列提供描述性名称,请使用列别名。

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

SELECT

[column_1 | expression] AS descriptive_name

FROM table_name;

要为列提供别名,请使用AS关键字后跟别名。如果别名包含空格,则必须按以下方式引用它(使用(`)):

SELECT

[column_1 | expression] AS `descriptive name`

FROM table_name;

由于AS关键字是可选的,因此可以在语句中省略它。请注意,您还可以为表达式指定别名。

我们来看看示例数据库中的employees表。

+----------------+

| employees |

+----------------+

| employeeNumber |

| lastName |

| firstName |

| extension |

| email |

| officeCode |

| reportsTo |

| jobTitle |

+----------------+

8 rows in set (0.01 sec)

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

SELECT

CONCAT_WS(', ', lastName, firstname)

FROM

employees;

运行结果:

+--------------------------------------+

| CONCAT_WS(', ', lastName, firstname) |

+--------------------------------------+

| Murphy, Diane |

| Patterson, Mary |

| Firrelli, Jeff |

| Patterson, William |

| Bondur, Gerard |

...

列标题很难阅读。您可以为输出的标题指定列别名,使其更具可读性,如下面的查询:

SELECT

CONCAT_WS(', ', lastName, firstname) AS `Full name`

FROM

employees;

运行结果:

+--------------------+

| Full name |

+--------------------+

| Murphy, Diane |

| Patterson, Mary |

| Firrelli, Jeff |

| Patterson, William |

| Bondur, Gerard |

...

在MySQL中,可以使用ORDER BY,GROUP BY和HAVING子句中来引用列的别名。

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

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 |

...

以下语句选择总金额大于60000的订单。在GROUP BY和HAVING子句中使用列别名。

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 (0.02 sec)

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

MySQL表别名

可以使用别名为表提供不同的名称。使用AS关键字为表分配别名,如下所示:

table_name AS table_alias

表的别名称为表别名。与列别名一样,AS关键字是可选的,因此您可以省略它。

我们来看看customers和orders表。

+------------------------+

| customers |

+------------------------+

| customerNumber |

| customerName |

| contactLastName |

| contactFirstName |

| phone |

| addressLine1 |

| addressLine2 |

| city |

| state |

| postalCode |

| country |

| salesRepEmployeeNumber |

| creditLimit |

+------------------------+

13 rows in set (0.01 sec)

+----------------+

| orders |

+----------------+

| orderNumber |

| orderDate |

| requiredDate |

| shippedDate |

| status |

| comments |

| customerNumber |

+----------------+

7 rows in set (0.01 sec)

两个表都具有相同的列名: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

ORDER BY

total DESC;

运行结果:

+------------------------------------+-------+

| customerName | total |

+------------------------------------+-------+

| Euro+ Shopping Channel | 26 |

| Mini Gifts Distributors Ltd. | 17 |

| Down Under Souveniers, Inc | 5 |

| Danish Wholesale Imports | 5 |

| Australian Collectors, Co. | 5 |

| Dragon Souveniers, Ltd. | 5 |

...

上面的查询从customers和orders表中选择客户名称和订单数量。c用作customers表的表别名和o表orders的别名。customers和orders表中的列通过表别名引用。

如果不在上面的查询中使用别名,则必须使用表名来引用其列,这会使查询变得冗长且不太可读,如下所示:

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别名来使查询更易于阅读和更易于理解。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐