1. as 关键字作用
-
as关键字用来给 列 或 表 取别名。比如:
select name as 姓名 from student 学生表;
注意:理论上列 或 表 取别名时的as都可以省略。但是习惯为列取别名时不省略as,为表取别名时省略as。
-
但其本质上是对其所指向的数据取别名,有点指针的味道,因此可以直接为值取别名:
① 假设表tb
的数据如下:
② 直接对值取别名:select col1, "c" as col2 from tb;
③ 结果为:
2. 作用范围
(1) 表别名
表别名在from
关键字后面,所以:
比如常见的几种情况:
-- 在select关键字后
select u.name
from user u;
-- 在join on字段后
select ...
from tab1 a join tab2 b on a.id = b.id;
(2) 列别名
列别名在select
关键字后面,所以:
验证链接上图的参考文章
- 需要注意的是在本级,也就是select中是不能使用的。比如:
select age as a, a + 1 as grown -- 错误,定义的别名a,不能在本级select中使用。只能:age + 1 as grown from ...
- 但是在mysql8.0 以及 hive 中,都进行了优化,在select后面的列别名 (注意:这个列别名不能是窗口函数的列别名!!!):从
group by
开始都能使用:
3. 细节
select 表别名.字段名
时查询结果的字段名为字段名
,而不是表别名.字段名
。比如:
select
up.id -- 列名为 id ,而不是 up.id,所以没必要再为该列取列名:up.id as id
from user u join user_product up on u.id = up.uid;
4. 面试题
4.1 表别名和表名重复时,会优先访问表别名
表别名是局部变量,表名是全局变量。因此,表别名和表名重复时,会优先访问表别名: