MySQL数据库
Completion requirements
使用别名(Aliases)
在 SQL 查询中,可以通过 AS
为表达式、列或表分配别名,以下是具体使用场景和注意事项:
1. 为表达式或列分配别名
- 使用
AS
可以为表达式或列分配别名,别名会作为结果集中的列名。 - 别名可以与
ORDER BY
或HAVING
子句配合使用,但不能在WHERE
子句中使用。
示例:
SELECT
CONCAT(last_name, ' ', first_name) AS full_name, -- 将拼接后的结果命名为 full_name
nickname AS nick -- 为 nickname 列分配别名 nick
FROM
mytable
ORDER BY
full_name; -- 按别名 full_name 排序
2. 为表分配别名
- 表名可以通过
AS
分配简短的别名,简化引用。 - 也可以省略
AS
直接分配别名。
示例:
SELECT
COUNT(B.Booking_ID), -- 统计 B 表中的 Booking_ID
U.User_Location -- 获取 U 表的 User_Location
FROM
Users U -- 为 Users 表分配别名 U
LEFT OUTER JOIN
Bookings AS B -- 为 Bookings 表分配别名 B
ON
U.User_ID = B.Rep_ID AND
B.Project_ID = '10' -- 筛选条件
GROUP BY
U.User_Location; -- 按 User_Location 分组
3. 自连接中的别名
- 在使用自连接时,别名至关重要,可以为表的不同实例分配不同的别名,便于区分。
示例: 假设 people
表中每个人都有 name
和 parent
字段,可以通过别名将表分别表示为父母和子女的角色。
SELECT
p.name AS parent, -- 父母姓名
c.name AS child, -- 子女姓名
MIN((TO_DAYS(NOW()) - TO_DAYS(c.dob)) / 365) AS minage -- 子女的最小年龄
FROM
people AS p -- 为父母分配别名 p
LEFT JOIN
people AS c -- 为子女分配别名 c
ON
p.name = c.parent -- 父母与子女的关系
WHERE
c.name IS NOT NULL -- 子女姓名不为空
GROUP BY
parent -- 按父母分组
HAVING
minage > 50 -- 筛选子女年龄大于 50 的父母
ORDER BY
p.dob; -- 按父母的出生日期排序
注意事项
-
AS
是可选的:
可以直接写别名而无需使用AS
,例如:SELECT nickname nick FROM mytable;
-
别名限制:
- 别名不能在
WHERE
子句中直接使用,因为WHERE
在SELECT
之前执行。 - 在
ORDER BY
、GROUP BY
和HAVING
中可以直接使用别名。
- 别名不能在
-
用途:
- 别名能提高查询的可读性。
- 必须使用别名来区分自连接中的表。
通过别名,复杂查询可以变得更加简洁和易读,同时便于操作和理解结果。
Last modified: Friday, 17 January 2025, 7:23 PM