在 MySQL 中,为表和字段取别名(Alias) 是 SQL 开发的基础必备技能,既能大幅简化 SQL 代码、避免字段名冲突,又能让查询结果更易读,是多表连接、复杂查询的核心优化技巧。本文围绕「表别名」和「字段别名」两大核心知识点,用极简代码 + 场景说明,带你彻底掌握别名的用法。
一、核心知识点总览
1. 别名语法基础
| 别名类型 | 语法格式 | 关键字 | 作用 |
|---|---|---|---|
| 字段别名 | SELECT 字段名 [AS] 别名 FROM 表名 |
AS(可省略) |
自定义查询结果的列名,简化字段名 |
| 表别名 | FROM 表名 [AS] 别名 |
AS(可省略) |
简化表名引用,解决多表同名字段冲突 |
关键说明:
AS关键字可以省略,但推荐显式书写,提升代码可读性,避免歧义。
二、准备测试数据
创建两张关联表,用于后续所有示例:
1. 学生表 student
sql
CREATE TABLE student (
stu_id INT PRIMARY KEY AUTO_INCREMENT,
stu_name VARCHAR(20) NOT NULL,
class VARCHAR(10) NOT NULL,
age INT NOT NULL
);
INSERT INTO student VALUES
(1, '张三', '一班', 18),
(2, '李四', '二班', 19),
(3, '王五', '一班', 18);
2. 成绩表 score
sql
CREATE TABLE score (
score_id INT PRIMARY KEY AUTO_INCREMENT,
stu_id INT NOT NULL,
subject VARCHAR(20) NOT NULL,
score INT NOT NULL,
FOREIGN KEY (stu_id) REFERENCES student(stu_id)
);
INSERT INTO score VALUES
(1, 1, '语文', 85),
(2, 1, '数学', 92),
(3, 2, '语文', 78),
(4, 2, '数学', 88);
三、为字段取别名:让结果更易读
1. 核心作用
- 简化冗长的字段名,让查询结果列名更直观(如中文别名)
- 给聚合函数、表达式结果命名,避免无意义的默认列名
- 解决多表查询中同名字段的冲突问题
2. 基础语法
sql
-- 标准写法(推荐)
SELECT 字段名 AS 别名 FROM 表名;
-- 省略AS写法
SELECT 字段名 别名 FROM 表名;
3. 代码示例
示例 1:基础字段别名(简化 + 中文命名)
sql
-- 给字段取别名,让结果列名更易读
SELECT
stu_id AS 学号,
stu_name AS 姓名,
class AS 班级,
age AS 年龄
FROM student;
运行结果
| 学号 | 姓名 | 班级 | 年龄 |
|---|---|---|---|
| 1 | 张三 | 一班 | 18 |
| 2 | 李四 | 二班 | 19 |
| 3 | 王五 | 一班 | 18 |
示例 2:聚合函数 / 表达式别名(必用)
聚合函数、计算表达式没有默认列名,必须用别名命名:
sql
-- 统计每个学生的总分,给聚合结果取别名
SELECT
s.stu_name AS 姓名,
SUM(sc.score) AS 总分, -- 给SUM结果取别名
AVG(sc.score) AS 平均分, -- 给AVG结果取别名
MAX(sc.score) AS 最高分
FROM student s
JOIN score sc ON s.stu_id = sc.stu_id
GROUP BY s.stu_name;
运行结果
| 姓名 | 总分 | 平均分 | 最高分 |
|---|---|---|---|
| 张三 | 177 | 88.5 | 92 |
| 李四 | 166 | 83.0 | 88 |
示例 3:表达式别名(计算列命名)
sql
-- 给计算表达式取别名
SELECT
stu_name AS 姓名,
age + 1 AS 明年年龄 -- 给计算结果取别名
FROM student;
四、为表取别名:简化代码 + 解决冲突
1. 核心作用
- 简化长表名的重复书写,大幅缩短 SQL 长度
- 多表连接时,解决同名字段冲突 (如两张表都有
stu_id) - 提升复杂查询的可读性,明确字段所属表
2. 基础语法
sql
-- 标准写法(推荐)
SELECT 别名.字段名 FROM 表名 AS 别名 [JOIN 其他表];
-- 省略AS写法
SELECT 别名.字段名 FROM 表名 别名 [JOIN 其他表];
3. 代码示例
示例 1:单表简化(长表名优化)
sql
-- 给student表取别名s,简化书写
SELECT
s.stu_name, s.class
FROM student AS s
WHERE s.age = 18;
示例 2:多表连接(解决同名字段冲突,核心场景)
两张表都有stu_id,必须用表别名区分,否则 MySQL 报错:
sql
-- 给student取别名s,score取别名sc,解决同名字段冲突
SELECT
s.stu_id, -- 明确是student表的stu_id
s.stu_name,
sc.subject,
sc.score
FROM student AS s
JOIN score AS sc ON s.stu_id = sc.stu_id; -- 用别名关联,清晰无歧义
示例 3:自连接查询(必须用表别名)
自连接时同一张表会被引用两次,必须用不同别名区分:
sql
-- 自连接:查询同班的学生,必须给student取两个不同别名
SELECT
s1.stu_name AS 学生1,
s2.stu_name AS 学生2,
s1.class AS 班级
FROM student AS s1
JOIN student AS s2
ON s1.class = s2.class
AND s1.stu_id != s2.stu_id; -- 排除自己
运行结果
| 学生 1 | 学生 2 | 班级 |
|---|---|---|
| 张三 | 王五 | 一班 |
| 王五 | 张三 | 一班 |
五、别名使用的核心注意事项(避坑指南)
1. 别名的作用域
- 字段别名 :仅在
SELECT、ORDER BY子句中生效,不能在 WHERE、GROUP BY、HAVING 中使用
sql
-- 错误!WHERE中不能用字段别名
SELECT stu_name AS 姓名 FROM student WHERE 姓名 = '张三';
-- 正确:WHERE中用原字段名
SELECT stu_name AS 姓名 FROM student WHERE stu_name = '张三';
- 表别名:在当前查询的所有子句(WHERE、GROUP BY、HAVING、ORDER BY)中全局生效
2. 别名命名规则
- 别名可以是中文、英文、数字,但不能与关键字冲突
- 别名含空格 / 特殊字符时,必须用反引号`````包裹:
sql
SELECT stu_name AS `学生姓名` FROM student;
3. 多表查询的强制要求
多表连接时,若存在同名字段,必须用表别名限定,否则 MySQL 会报错「列名不明确」:
sql
-- 错误!两张表都有stu_id,未加别名
SELECT stu_id FROM student JOIN score ON student.stu_id = score.stu_id;
-- 正确:加表别名
SELECT s.stu_id FROM student s JOIN score sc ON s.stu_id = sc.stu_id;
4. AS关键字的省略
AS可以省略,但复杂查询中推荐显式书写,避免歧义(如字段名和别名混淆):
sql
-- 省略AS(不推荐,可读性差)
SELECT stu_name 姓名 FROM student s WHERE s.age = 18;
-- 显式AS(推荐,清晰易懂)
SELECT stu_name AS 姓名 FROM student AS s WHERE s.age = 18;
六、综合实战:别名 + 复杂查询
sql
-- 需求:查询每个班级的平均分、最高分、最低分,用别名优化
SELECT
s.class AS 班级,
COUNT(*) AS 学生人数,
ROUND(AVG(sc.score), 2) AS 平均分,
MAX(sc.score) AS 最高分,
MIN(sc.score) AS 最低分
FROM student AS s
JOIN score AS sc ON s.stu_id = sc.stu_id
GROUP BY s.class
ORDER BY 平均分 DESC;
运行结果
| 班级 | 学生人数 | 平均分 | 最高分 | 最低分 |
|---|---|---|---|---|
| 一班 | 2 | 88.50 | 92 | 85 |
| 二班 | 2 | 83.00 | 88 | 78 |
七、核心总结
- 字段别名 :用
AS给字段 / 聚合结果命名,让结果更易读,仅在SELECT/ORDER BY生效 - 表别名 :用
AS给表取短名,简化代码、解决多表同名字段冲突,全局生效 - 避坑关键 :
WHERE不能用字段别名,多表同名字段必须加表别名,AS推荐显式书写 - 核心场景:多表连接、自连接、聚合查询、复杂报表,别名是必备优化技巧