Mysql 06: 表与字段别名全解——让 SQL 更简洁、可读性拉满
在 MySQL 中为表和字段取别名Alias是 SQL 开发的基础必备技能既能大幅简化 SQL 代码、避免字段名冲突又能让查询结果更易读是多表连接、复杂查询的核心优化技巧。本文围绕「表别名」和「字段别名」两大核心知识点用极简代码 场景说明带你彻底掌握别名的用法。一、核心知识点总览1. 别名语法基础别名类型语法格式关键字作用字段别名SELECT 字段名 [AS] 别名 FROM 表名AS可省略自定义查询结果的列名简化字段名表别名FROM 表名 [AS] 别名AS可省略简化表名引用解决多表同名字段冲突关键说明AS关键字可以省略但推荐显式书写提升代码可读性避免歧义。二、准备测试数据创建两张关联表用于后续所有示例1. 学生表studentCREATE 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. 成绩表scoreCREATE 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. 基础语法-- 标准写法推荐 SELECT 字段名 AS 别名 FROM 表名; -- 省略AS写法 SELECT 字段名 别名 FROM 表名;3. 代码示例示例 1基础字段别名简化 中文命名-- 给字段取别名让结果列名更易读 SELECT stu_id AS 学号, stu_name AS 姓名, class AS 班级, age AS 年龄 FROM student;运行结果学号姓名班级年龄1张三一班182李四二班193王五一班18示例 2聚合函数 / 表达式别名必用聚合函数、计算表达式没有默认列名必须用别名命名-- 统计每个学生的总分给聚合结果取别名 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;运行结果姓名总分平均分最高分张三17788.592李四16683.088示例 3表达式别名计算列命名-- 给计算表达式取别名 SELECT stu_name AS 姓名, age 1 AS 明年年龄 -- 给计算结果取别名 FROM student;四、为表取别名简化代码 解决冲突1. 核心作用简化长表名的重复书写大幅缩短 SQL 长度多表连接时解决同名字段冲突如两张表都有stu_id提升复杂查询的可读性明确字段所属表2. 基础语法-- 标准写法推荐 SELECT 别名.字段名 FROM 表名 AS 别名 [JOIN 其他表]; -- 省略AS写法 SELECT 别名.字段名 FROM 表名 别名 [JOIN 其他表];3. 代码示例示例 1单表简化长表名优化-- 给student表取别名s简化书写 SELECT s.stu_name, s.class FROM student AS s WHERE s.age 18;示例 2多表连接解决同名字段冲突核心场景两张表都有stu_id必须用表别名区分否则 MySQL 报错-- 给student取别名sscore取别名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自连接查询必须用表别名自连接时同一张表会被引用两次必须用不同别名区分-- 自连接查询同班的学生必须给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 中使用-- 错误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. 别名命名规则别名可以是中文、英文、数字但不能与关键字冲突别名含空格 / 特殊字符时必须用反引号包裹SELECT stu_name AS 学生姓名 FROM student;3. 多表查询的强制要求多表连接时若存在同名字段必须用表别名限定否则 MySQL 会报错「列名不明确」-- 错误两张表都有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可以省略但复杂查询中推荐显式书写避免歧义如字段名和别名混淆-- 省略AS不推荐可读性差 SELECT stu_name 姓名 FROM student s WHERE s.age 18; -- 显式AS推荐清晰易懂 SELECT stu_name AS 姓名 FROM student AS s WHERE s.age 18;六、综合实战别名 复杂查询-- 需求查询每个班级的平均分、最高分、最低分用别名优化 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;运行结果班级学生人数平均分最高分最低分一班288.509285二班283.008878七、核心总结字段别名用AS给字段 / 聚合结果命名让结果更易读仅在SELECT/ORDER BY生效表别名用AS给表取短名简化代码、解决多表同名字段冲突全局生效避坑关键WHERE不能用字段别名多表同名字段必须加表别名AS推荐显式书写核心场景多表连接、自连接、聚合查询、复杂报表别名是必备优化技巧
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2476438.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!