SQL Union & As
1. 定义
编程之家解释:Union
操作符用于合并两个或多个Select的结果集;As
操作符可以给字段或数据表指定别名
。
2. 前言
本小节中,我们将介绍 Union
和 As
。
在实际数据存储应用中,可能会对某类数据进行分表存储。如:imooc_user 表可能会被拆分成 imooc_user_en 和 imooc_user_zh 两张表,但二者的结构和字段一致,Union 可以方便在的时候可以直接这两张表的数据。
在书写 时,有些字段名,如 username ,表意不够明确,我们可以通过 As 给该字段取上别名 imooc_username,这样就给阅读和维护提供了便利。
注意: Union 合并的结果集,必须拥有相同字段个数,且合并的字段类型必须兼容,如字符类型和整型是不能兼容的。
本小节测试数据如下,请先在中执行:
DROP TABLE IF EXISTS imooc_user_en;CREATE TABLE imooc_user_en( username varchar(), age int);INSERT INTO imooc_user_en(username,age) VALUES ('peter', ), ('lucy', );DROP TABLE IF EXISTS imooc_user_zh;CREATE TABLE imooc_user_zh( username varchar(), age int);INSERT INTO imooc_user_zh(username,age) VALUES ('pedro', ), ('peter', );
3. Union
Union 用于合并 Select 的多个结果集,使用语法如下:
SELECT [col] FROM [table_name1]UNIONSELECT [col] FROM [table_name2]
其中table_name
代表数据表,col
表示字段,数字 1,2 表示多张表。
单独使用 Union 时会认筛选掉结果集中相同的数据。
请书写 语句,得到imooc_user_en
和imooc_user_zh
中的所有。
分析:
按照语法使用 Union 即可。
语句:
SELECT username, age FROM imooc_user_enUNIONSELECT username, age FROM imooc_user_zh;
结果如下:
+----------+-----+ | username | age | +----------+-----+ | peter | 18 | | lucy | 29 | | pedro | 23 | +----------+-----+
imooc_user_en 和 imooc_user_zh 表中存在同名且同龄的peter
,Union 在合并两个结果集时,认地去掉了重复值。可有时,我们需要保留重复的记录,这时就需要使用 Union All。
使用 Union All 会保留结果集中的所有数据。
请书写 语句,返回imooc_user_en
和imooc_user_zh
中的所有。
分析:
按照语法使用 Union All 即可。
语句:
SELECT username, age FROM imooc_user_enUNION ALLSELECT username, age FROM imooc_user_zh;
结果如下:
+----------+-----+ | username | age | +----------+-----+ | peter | 18 | | lucy | 29 | | pedro | 23 | | peter | 18 | +----------+-----+
: Union 在合并字段时由于会筛选掉重复记录,这个过程是较为耗时的,如果非必需情况,请使用 Union All。
4. As
As 主要用于给数据表或字段给定别名(Alias)
。
使用语法如下:
SELECT [col] AS [alias1] FROM [table_name] AS [alias2]
其中col
表示字段,table_name
表示表,alias
表示别名,数字1、2代表多个别名。
使用 As 可以为数据表指定别名。
请书写 语句,返回imooc_user_zh
中的所有,并且语句中指定imooc_user_zh
的别名为imooc_user
。
分析:
按照语法使用 As 即可。
语句:
SELECT username, age FROM imooc_user_zh AS imooc_user;
结果如下:
+----------+-----+ | username | age | +----------+-----+ | pedro | 23 | | peter | 18 | +----------+-----+
使用 As 还可以为字段指定别名。
请书写 语句,返回imooc_user_zh
中的所有,并且语句中指定username
的别名为imooc_user_name
。
分析:
按照语法使用 As 即可。
语句:
SELECT username AS imooc_user_name, age FROM imooc_user_zh;
+-----------------+-----+ | imooc_user_name | age | +-----------------+-----+ | pedro | 23 | | peter | 18 | +-----------------+-----+
5. 小结
Union 的使用场景其实不多,但语法简单,在数据聚合相关的场景中十分有用。
As 可以给数据表和字段指定别名,但其实不使用 As 也是可以指定别名的,但阅读性相对差了一些。
别名
的使用其实很频繁,不仅可以提高,而且可以提高 语句的阅读性。
As 指定别名不仅可以用在 Select ,也可以用在 Update,对于 Delete 有些是使用别名的。