MySQL别名

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

MySQL支持两种别名,分别称为列别名和表别名。

表的MySQL别名

您可以使用别名为表指定其他名称。
通过使用以下语法AS关键字为表分配别名:

table_name AS table_alias

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

此查询显示如何将employee表别名分配为e:

SELECT * FROM employees e;

为表分配别名后,您可以使用以下语法引用表列:

table_alias.column_name

例如:

SELECT 
    e.firstName, 
    e.lastName
FROM
    employees e
ORDER BY e.firstName;

表别名通常用于包含INNER JOIN,LEFT JOIN,RIGHT JOIN子句的语句以及子查询中。

让我们看一下客户和订单表:

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

上面的查询从客户和订单表中选择客户名称和订单数量。
它使用c作为customers表的表别名,并使用o作为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别名,包括列和表别名。

列的MySQL别名

有时,列名是如此专业,以致于查询的输出很难理解。
要给列起一个描述性名称,可以使用列别名。

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

SELECT 
   [column_1 | expression] AS descriptive_name
FROM table_name;

要将别名分配给列,请使用AS关键字,后跟别名。
如果别名包含空格,则必须将其引用为以下内容:

SELECT 
   [column_1 | expression] AS `descriptive name`
FROM 
   table_name;

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

让我们看一下示例数据库中的employee表。

以下查询选择员工的名字和姓氏。
它使用CONCAT_WS()函数将名字和姓氏连接为全名。

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

列标题很难阅读。
为了解决这个问题,您可以为输出的列标题分配一个列别名,如以下查询所示:

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

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

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

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

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

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

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

日期:2019-11-20 08:52:05 来源:oir作者:oir