赞
踩
作者:瀚高PG实验室 (Highgo PG Lab)- Kalath
在SQL中,UNION和UNION ALL运算符可以用来帮助我们获取多个表,并将结果放入一个表中,其中包含所有匹配的列。如果希望结果作为单个记录集返回,则使用此运算符会非常有帮助。
何时应该使用Union?
当多个表具有相同的结构但由于某种原因(通常出于性能考虑或存档目的)而被拆分时,通常需要使用UNION运算符。
而且,有以下几个注意事项:
1.所有单个查询必须具有相同数量的列和兼容的数据类型。
2.不匹配的查询将无法执行。
3.在构建查询时验证一致性。
4.默认情况下,UNION仅返回不同的值。
举个例子:
有两张表,内容分别是学生和教授的相关信息。如下所示:
- postgres=# select * from students;
- id | name | major
- ----+-------+-------------------
- 1 | Wang | Computer Science
- 2 | Tang | Civil Engineering
- 3 | Zhang | English
- (3 rows)
-
- postgres=# select * from professors;
- id | name | major
- ----+-------+----------
- 1 | Zheng | Japanese
- 2 | Hao | Music
- (2 rows)
要将这两个表合并在一起,需要运行此查询:
- postgres=# select * from students union select * from professors;
- id | name | major
- ----+-------+-------------------
- 1 | Zheng | Japanese
- 3 | Zhang | English
- 1 | Wang | Computer Science
- 2 | Tang | Civil Engineering
- 2 | Hao | Music
- (5 rows)
注意:一旦此查询运行,数据将不会以任何特定顺序显示。当然,可以使用ORDER BY来确保数据正确排序。
何时应该使用UNION ALL?
前面提到,UNION运算符默认只返回不同的值。 如果希望结果包含所有值,即包括重复值,那么可以使用UNION ALL。
但是,UNION ALL也不保证生成的行将按任何特定顺序排列。因此,就像使用UNION一样,可以使用ORDER BY进行排序。
举个例子,有如下两张表::
- postgres=# select * from club;
- name | country
- ----------+---------
- Bayern | Germany
- Dortmund | Germany
- Bremen | Germany
- (3 rows)
-
- postgres=# select * from champion;
- name | country
- -----------+---------
- Chelsea | England
- Barcelona | Spain
- Bayern | Germany
- (3 rows)
如果只是执行UNION,那么结果会如下所示:
- postgres=# select * from club union select * from champion;
- name | country
- -----------+---------
- Bayern | Germany
- Bremen | Germany
- Chelsea | England
- Dortmund | Germany
- Barcelona | Spain
- (5 rows)
但是这样就会失去一条重复的记录。如果想要显示全部的记录,包括重复的部分,那么应该用UNION ALL替换UNION。
- postgres=# select * from club union all select * from champion;
- name | country
- -----------+---------
- Bayern | Germany
- Dortmund | Germany
- Bremen | Germany
- Chelsea | England
- Barcelona | Spain
- Bayern | Germany
- (6 rows)
现在结果中就会显示两张表中的所有记录。
注意:UNION ALL可以更快地执行,因为它不必过滤掉重复项。
UNION和UNION ALL是统一多个查询结果的好方法。可以使用UNION查看整个不同记录的集合,而且也可以使用UNION ALL查看包含重复记录的完整集。必要的时候可以使用ORDER BY来确保结果按照您想要的顺序进行显示。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。