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)
MySQL表别名
可以使用别名为表提供不同的名称。使用AS
关键字为表分配别名,如下所示:
table_name AS table_alias表的别名称为表别名。与列别名一样,
AS
关键字是可选的,因此您可以省略它。
经常在INNER JOIN,LEFT JOIN,self JOIN子句和子查询的语句中使用表别名。
我们来看看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别名来使查询更易于阅读和更易于理解。