您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

SQL Union & As

1. 定义

编程之家解释:Union操作符用于合并两个或多个Select的结果集;As操作符可以给字段或数据表指定别名

2. 前言

本小节中,我们将介绍 UnionAs

在实际数据存储应用中,可能会对某类数据进行分表存储。如: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_enimooc_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_enimooc_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 有些是使用别名的。


联系我
置顶