MySQL Alias

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

MySQL支持两种别名:列别名和表别名。

MySQL 列的别名

有时,列名的技术性很强,使得查询的输出非常难以理解。要为列指定描述性名称,可以使用列别名。

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

SELECT 
   [column_1 | expression] AS descriptive_name
FROM table_name;Code language: SQL (Structured Query Language) (sql)

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

SELECT 
   [column_1 | expression] AS `descriptive name`
FROM 
   table_name;Code language: SQL (Structured Query Language) (sql)

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

让我们看一下示例数据库中的employees

Employees Table

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

SELECT 
    CONCAT_WS(', ', lastName, firstname)
FROM
    employees;Code language: SQL (Structured Query Language) (sql)

试试看

MySQL query without Alias Example

栏目标题很难读。要解决此问题,您可以为输出的列标题分配列别名,如以下查询所示:

SELECT
   CONCAT_WS(', ', lastName, firstname) AS `Full name`
FROM
   employees;Code language: SQL (Structured Query Language) (sql)

试试看

MySQL Column Alias Example

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

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

SELECT
	CONCAT_WS(', ', lastName, firstname) `Full name`
FROM
	employees
ORDER BY
	`Full name`;Code language: SQL (Structured Query Language) (sql)

试试看

MySQL Alias with ORDER BY example

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

SELECT
	orderNumber `Order no.`,
	SUM(priceEach * quantityOrdered) total
FROM
	orderDetails
GROUP BY
	`Order no.`
HAVING
	total > 60000;Code language: SQL (Structured Query Language) (sql)

试试看

MySQL Alias with Expression example

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

MySQL 表的别名

您可以使用别名为表指定不同的名称。您可以使用AS关键字为表分配别名,语法如下:

table_name AS table_aliasCode language: SQL (Structured Query Language) (sql)

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

此查询显示如何将employees表别名指定为 e:

SELECT * FROM employees e;Code language: SQL (Structured Query Language) (sql)

一旦为表分配了别名,您就可以使用以下语法引用表列:

table_alias.column_nameCode language: SQL (Structured Query Language) (sql)

例如:

SELECT 
    e.firstName, 
    e.lastName
FROM
    employees e
ORDER BY e.firstName;Code language: SQL (Structured Query Language) (sql)

表别名通常用在包含INNER JOINLEFT JOINRIGHT JOIN子句的语句以及子查询中。

让我们看一下customersorders表:

Customers and Orders Tables

两个表具有相同的列名: customerNumber如果不使用表别名来限定customerNumber列,您将收到如下错误消息:

Error Code: 1052. Column 'customerNumber' in on clause is ambiguousCode language: SQL (Structured Query Language) (sql)

为了避免此错误,您可以使用表别名来限定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;Code language: SQL (Structured Query Language) (sql)

试试看

MySQL Table Alias Example

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

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

SELECT
	customers.customerName,
	COUNT(orders.orderNumber) total
FROM
	customers
INNER JOIN orders ON customers.customerNumber = orders.customerNumber
GROUP BY
	customerName
ORDER BY
	total DESCCode language: SQL (Structured Query Language) (sql)

试试看

在本教程中,您学习了如何使用 MySQL 别名,包括列别名和表别名。

本教程有帮助吗?