当前位置:   article > 正文

PostgreSQL中UNION和UNION ALL_postgresql union all

postgresql union all

作者:瀚高PG实验室 (Highgo PG Lab)- Kalath

在SQL中,UNION和UNION ALL运算符可以用来帮助我们获取多个表,并将结果放入一个表中,其中包含所有匹配的列。如果希望结果作为单个记录集返回,则使用此运算符会非常有帮助。

何时应该使用Union?

当多个表具有相同的结构但由于某种原因(通常出于性能考虑或存档目的)而被拆分时,通常需要使用UNION运算符

而且,有以下几个注意事项:

1.所有单个查询必须具有相同数量的列和兼容的数据类型。

2.不匹配的查询将无法执行。

3.在构建查询时验证一致性。

4.默认情况下,UNION仅返回不同的值。

举个例子:

有两张表,内容分别是学生和教授的相关信息。如下所示:

  1. postgres=# select * from students;
  2. id | name | major
  3. ----+-------+-------------------
  4. 1 | Wang | Computer Science
  5. 2 | Tang | Civil Engineering
  6. 3 | Zhang | English
  7. (3 rows)
  8. postgres=# select * from professors;
  9. id | name | major
  10. ----+-------+----------
  11. 1 | Zheng | Japanese
  12. 2 | Hao | Music
  13. (2 rows)

要将这两个表合并在一起,需要运行此查询:

  1. postgres=# select * from students union select * from professors;
  2. id | name | major
  3. ----+-------+-------------------
  4. 1 | Zheng | Japanese
  5. 3 | Zhang | English
  6. 1 | Wang | Computer Science
  7. 2 | Tang | Civil Engineering
  8. 2 | Hao | Music
  9. (5 rows)

注意:一旦此查询运行,数据将不会以任何特定顺序显示。当然,可以使用ORDER BY来确保数据正确排序。

何时应该使用UNION ALL?

前面提到,UNION运算符默认只返回不同的值。 如果希望结果包含所有值,即包括重复值,那么可以使用UNION ALL。

但是,UNION ALL也不保证生成的行将按任何特定顺序排列。因此,就像使用UNION一样,可以使用ORDER BY进行排序。

举个例子,有如下两张表::

  1. postgres=# select * from club;
  2. name | country
  3. ----------+---------
  4. Bayern | Germany
  5. Dortmund | Germany
  6. Bremen | Germany
  7. (3 rows)
  8. postgres=# select * from champion;
  9. name | country
  10. -----------+---------
  11. Chelsea | England
  12. Barcelona | Spain
  13. Bayern | Germany
  14. (3 rows)

如果只是执行UNION,那么结果会如下所示:

  1. postgres=# select * from club union select * from champion;
  2. name | country
  3. -----------+---------
  4. Bayern | Germany
  5. Bremen | Germany
  6. Chelsea | England
  7. Dortmund | Germany
  8. Barcelona | Spain
  9. (5 rows)

但是这样就会失去一条重复的记录。如果想要显示全部的记录,包括重复的部分,那么应该用UNION ALL替换UNION。

  1. postgres=# select * from club union all select * from champion;
  2. name | country
  3. -----------+---------
  4. Bayern | Germany
  5. Dortmund | Germany
  6. Bremen | Germany
  7. Chelsea | England
  8. Barcelona | Spain
  9. Bayern | Germany
  10. (6 rows)

现在结果中就会显示两张表中的所有记录。

注意:UNION ALL可以更快地执行,因为它不必过滤掉重复项。

UNION和UNION ALL是统一多个查询结果的好方法。可以使用UNION查看整个不同记录的集合,而且也可以使用UNION ALL查看包含重复记录的完整集。必要的时候可以使用ORDER BY来确保结果按照您想要的顺序进行显示。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/441366
推荐阅读
相关标签
  

闽ICP备14008679号