首页 > MySQL > SQL 入门教程 > 17 SQL Union & As

SQL Union & As

1. 定义

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

2. 前言

本小节中,我们将介绍SQL Union和 SQL As

在实际数据存储应用中,可能会对某类数据进行分表存储。如:imooc_user 表可能会被拆分成 imooc_user_en 和 imooc_user_zh 两张表,但二者的结构和字段一致,Union 可以方便在查询的时候可以直接获取这两张表的数据。

在书写 SQL 时,有些字段名,如 username ,表意不够明确,我们可以通过 As 给该字段取上一个别名 imooc_username,这样就给SQL阅读和维护提供了便利。

注意: Union 合并的结果集,必须拥有相同字段个数,且合并的字段类型必须兼容,如字符类型和整型是不能兼容的。

本小节测试数据如下,请先在数据库中执行:

DROP TABLE IF EXISTS imooc_user_en;
CREATE TABLE imooc_user_en
(
  username varchar(20),
  age int
);
INSERT INTO imooc_user_en(username,age) VALUES ('peter', 18), ('lucy', 29);

DROP TABLE IF EXISTS imooc_user_zh;
CREATE TABLE imooc_user_zh
(
  username varchar(20),
  age int
);
INSERT INTO imooc_user_zh(username,age) VALUES ('pedro', 23), ('peter', 18);

3. SQL Union

SQL Union 用于合并 Select 查询的多个结果集,使用语法如下:

SELECT [col] FROM [table_name1]
UNION
SELECT [col] FROM [table_name2]

其中table_name代表数据表名称,col表示字段名称,数字 1,2 表示多张表。

3.1 例1 单独使用 Union

单独使用 Union 时会默认筛选掉结果集中相同的数据。

请书写 SQL 语句,查询得到imooc_user_enimooc_user_zh中的所有用户。

分析:

按照语法使用 Union 即可。

语句:

SELECT username, age FROM imooc_user_en
UNION
SELECT username, age FROM imooc_user_zh;

查询结果如下:

+----------+-----+
| username | age |
+----------+-----+
| peter    | 18  |
| lucy     | 29  |
| pedro    | 23  |
+----------+-----+

imooc_user_en 和 imooc_user_zh 表中存在同名且同龄的用户peter,Union 在合并两个结果集时,默认地去掉了重复值。可有时,我们需要保留重复的记录,这时就需要使用 Union All。

3.2 例2 使用 Union All

使用 Union All 会保留结果集中的所有数据。

请书写 SQL 语句,返回imooc_user_enimooc_user_zh中的所有用户。

分析:

按照语法使用 Union All 即可。

语句:

SELECT username, age FROM imooc_user_en
UNION ALL
SELECT username, age FROM imooc_user_zh;

查询结果如下:

+----------+-----+
| username | age |
+----------+-----+
| peter    | 18  |
| lucy     | 29  |
| pedro    | 23  |
| peter    | 18  |
+----------+-----+

提示: Union 在合并字段时由于会筛选掉重复记录,这个过程是较为耗时的,如果非必需情况,请使用 Union All。

4. SQL As

SQL As 主要用于给数据表或字段给定别名(Alias)

使用语法如下:

SELECT [col] AS [alias1] FROM [table_name] AS [alias2]

其中col表示字段名称,table_name表示表名称,alias表示别名,数字1、2代表多个别名。

4.1 例3 As 作用于表名称

使用 As 可以为数据表指定一个别名。

请书写 SQL 语句,返回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  |
+----------+-----+

4.2 例4 As 作用于字段名称

使用 As 还可以为字段指定一个别名。

请书写 SQL 语句,返回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 也是可以指定别名的,但阅读性相对差了一些。
  • 别名的使用其实很频繁,不仅可以提高性能,而且可以提高 SQL 语句的阅读性。
  • As 指定别名不仅可以用在 Select 查询,也可以用在 Update,对于 Delete 有些数据库是不支持使用别名的。
本文来自互联网用户投稿,不拥有所有权,该文观点仅代表作者本人,不代表本站立场。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,邮箱:80764001@qq.com,予以删除。
© 2023 PV138 · 站点地图 · 免责声明 · 联系我们 · 问题反馈