结论
集合操作主要通过UNION子句、INTERSECT子句、EXCEPT子句和MINUS子句实现
| 子句类型 | 描述 | 使用方式及约束 |
| UNION | UNION计算多个 SELECT语句返回行集合的并集。 | 一般形式:select_statement UNION [ALL] select_statement • select_statement可以是任何没有ORDER BY、 LIMIT、 FOR UPDATE子句的 • SELECT 除非声明了 语句。 ALL子句,否则缺省的UNION结果不包含重复的行。 • 同一个SELECT语句中的多个UNION操作符是从左向右计算的,除非用圆括弧进行了标识。 |
| INTERSECT | INTERSECT计算多个SELECT语句返回行集合的交集,不含重复 的记录。 | 一般形式:select_statement INTERSECT select_statement • select_statement可以是任何没有FOR UPDATE子句的SELECT语句。 • 同一个SELECT进行了标识。 语句中的多个INTERSECT操作符是从左向右计算的,除非用圆括弧 • 当对多个SELECT语句的执行结果进行UNION和INTERSECT操作的时候,会优先处 |
| EXCEPT | EXCEPT计算存在于左 边SELECT语句的输出 而不存在于右边 SELECT语句输出的行。 | •select_statement是任何没有FOR UPDATE子句的SELECT表达式。 •EXCEPT的结果不包含任何重复的行,除非声明了ALL选项。 • 除非用圆括弧指明顺序,否则同一个SELECT语句中的多个EXCEPT操作符是从左向右计算的。 EXCEPT和UNION的绑定级别相同。 |
| MINUS | 与EXCEPT子句等同。 | 同EXCEPT。 |
示例
CREATE TABLE test(id1 INT,id2 INT);
INSERT INTO test VALUES(100,200);
INSERT INTO test VALUES(300,400);
INSERT INTO test VALUES(200,500);
示例数据库
demo=# CREATE TABLE test(id1 INT,id2 INT);
CREATE TABLE
demo=#
demo=# INSERT INTO test VALUES(100,200);
INSERT 01
demo=#
demo=# INSERT INTO test VALUES(300,400);
INSERT 01
demo=#
demo=# INSERT INTO test VALUES(200,500);
INSERT 01
demo=#
demo=#select*from test;
id1 | id2
-----+-----
100|200
300|400
200|500
(3 rows)
UNION(没有去重,里面有重复数据 )
demo=# SELECT id2 FROM test UNION ALL SELECT id1 FROM test;
id2
-----
200
400
500
100
300
200
(6 rows)
UNION ALL(去重,没有重复数据 )
demo=# SELECT id2 FROM test UNION SELECT id1 FROM test;
id2
-----
200
500
400
300
100
(5 rows)
INTERSECT 计算多个SELECT语句返回行集合的交集(返回两个表共同的数据)
demo=# SELECT id2 FROM test INTERSECT SELECT id1 FROM test;
id2
-----
200
(1 row)
EXCEPT存在于左边的表,不存在右边表的数据
demo=# SELECT id2 FROM test EXCEPT SELECT id1 FROM test;
id2
-----
500
400
(2 rows)
MINUS与EXCEPT子句等同。
demo=# SELECT id2 FROM test MINUS SELECT id1 FROM test;
id2
-----
500
400
(2 rows)
demo=#
文章转载自SmallDB,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




