PostgreSQL中UNION的使⽤
⽬录
⽂档⽤途
UNION操作符计算所涉及的SELECT语句所返回的⾏的并集。如果希望结果作为单个记录集返回,则此运算符⾮常有⽤。
详细信息
1.UNION的使⽤
当多个表具有相同的结构但由于某种原因(通常出于性能考虑或存档⽬的)⽽被拆分时,通常需要使⽤UNION运算符。
使⽤UNION运算符时,有以下⼏个注意事项:
1)作为UNION两个操作数的SELECT语句必须产⽣相同数量的列并且对应位置上的列必须具有兼容的数据类型。
2)默认情况下,UNION的结果不会包含重复⾏。
3)除⾮⽤圆括号指定计算顺序,同⼀个SELECT语句中的多个UNION操作符会从左⾄右计算。
4)截⾄⽬前,FOR NO KEY UPDATE、FOR UPDATE、FOR SHARE和FOR KEY SHARE不能⽤于UNION结果或者UNION的任何输⼊。
举例说明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
----+-------+-------------------
sql中union多表合并
1 | Zheng | Japanese
3 | Zhang | English
1 | Wang | Computer Science
2 | Tang | Civil Engineering
2 | Hao | Music
(5 rows)
注意:运⾏此查询,数据将不会以任何特定顺序显⽰。您可以使⽤ORDER BY来确保数据按您指定的顺序显⽰。
2.UNION ALL的使⽤
前⾯提到,UNION运算符默认只返回不同的值。如果您希望结果包含所有值,即包括重复值,那么可以使⽤UNION ALL。
但是,UNION ALL也不保证⽣成的结果将按任何特定顺序排列。因此,和使⽤UNION⼀样,您需要使
⽤ORDER BY进⾏排序来确保数据按您指定的顺序显⽰。
举例说明UNION ALL的应⽤场景:
有如下两张表,其中包含⼀条重复的记录:
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的执⾏速度更快,因为它不必过滤掉重复项。
order by的详细使⽤请登录【瀚⾼技术⽀持平台】查看
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论