【数据库面试题02】别名的使用

1 表别名

假如存在以下两个表:

t1:

id name
1 SQL

t2:

id name
1 Alias

请问,下面查询语句的结果是什么?

SELECT t1.id t1.name
FROM t1 t
CROSS JOIN t2 t1;

可以看到,实际返回的是t2表的数据。

 

在SQL语句中,t1表的表名t1相当于一个全局变量,只要数据库对象存在就有效;而t2表的别名t1相当于一个局部变量,只在本条SQL内有效。可以类比一般编程语言,局部变量优先级更高,更优先的生效,因此本条SQL更优先生效的是t2表的别名t1,所以返回的是t2表的数据。

2 列别名

假如存在以下表:

t3:

id
0
1
2

那么执行如下的SQL语句的结果是什么?

SELECT -id AS id
FROM t3
ORDER BY id;

从结果可以看出,ORDER BY 真正生效的是别名,以上SQL语句的等效SQL为:

SELECT *
FROM (
SELECT -id AS id FROM t3 
)  t ORDER BY id;

 

 

 

版权声明:
作者:jackqiang
链接:http://www.jackqiang.com/interview/interview-db/1973/sql_alias/
来源:JackQiang's
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录