【PostgreSQL】数据查询-组合查询(UNION,INTERSECT,EXCEPT)

可以使用集合运算并集、交集和差值来组合两个查询的结果。语法是

sql 复制代码
query1 UNION [ALL] query2
query1 INTERSECT [ALL] query2
query1 EXCEPT [ALL] query2

其中 query1 和 query2 是可以使用到目前为止讨论的任何功能的查询。

UNION有效地将 query2 的结果追加到 query1 的结果(尽管不能保证这是实际返回行的顺序)。此外,它从其结果中消除重复的行,其方式与DISTINCT 相同,除非使用UNION ALL。

INTERSECT返回 Query1 的结果和 Query2 的结果中的所有行。除非使用重复行,否则将消除重复行。

EXCEPT返回 Query1 结果中但不在 Query2 结果中的所有行。(这有时称为两个查询之间的差异。同样,除非使用,否则将消除重复项。

为了计算两个查询的并集、交集或差值,这两个查询必须"并集兼容",这意味着它们返回相同数量的列,并且相应的列具有兼容的数据类型。

集合操作可以组合,例如

sql 复制代码
query1 UNION query2 EXCEPT query3

这相当于

sql 复制代码
(query1 UNION query2) EXCEPT query3

如此处所示,您可以使用括号来控制计算顺序。不带括号,从左到右关联,但比这两个运算符绑定得更紧密。因此

sql 复制代码
query1 UNION query2 INTERSECT query3

方法

sql 复制代码
query1 UNION (query2 INTERSECT query3)

还可以用括号将单个查询括起来。如果查询需要使用以下各节中讨论的任何子句,例如 .如果没有括号,您将收到语法错误,否则该子句将被理解为应用于集合操作的输出,而不是其输入之一。例如LIMIT

sql 复制代码
SELECT a FROM b UNION SELECT x FROM y LIMIT 10

被接受,但这意味着

sql 复制代码
(SELECT a FROM b UNION SELECT x FROM y) LIMIT 10

而不能接受

sql 复制代码
SELECT a FROM b UNION (SELECT x FROM y LIMIT 10)
相关推荐
焦糖布丁的午夜4 小时前
MySQL数据库大王小练习
数据库·mysql
狗头实习生5 小时前
Spring常见的事务失效原因
java·数据库·spring
冉冰学姐5 小时前
SSM泰兴市公交信息系统f504u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架应用·泰兴市公交·息管理系统
偶像你挑的噻7 小时前
3.Qt-基础布局以及事件
开发语言·数据库·qt
Dxy12393102167 小时前
MySQL如何做读写分离架构
数据库·mysql·架构
毕设十刻8 小时前
基于Vue的考勤管理系统8n7j8(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
合方圆~小文9 小时前
不同画面,三个镜头实时监控拍摄方案
数据结构·数据库·人工智能
ChrisitineTX10 小时前
凌晨突发Java并发问题:synchronized锁升级导致接口超时,排查过程全记录
java·数据库·oracle
极限实验室10 小时前
Easysearch 2.0.0 性能测试
数据库·性能优化
老华带你飞10 小时前
社团管理|基于Java社团管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端