暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

查询语句 - 集合操作

SmallDB 2024-07-29
16

结论

集合操作主要通过UNION子句、INTERSECT子句、EXCEPT子句和MINUS子句实现

子句类型描述

使用方式及约束
UNIONUNION计算多个
SELECT语句返回行集合的并集。
一般形式:select_statement UNION [ALL] select_statement
• select_statement可以是任何没有ORDER BY、 LIMIT、 FOR UPDATE子句的
• SELECT 除非声明了 语句。 ALL子句,否则缺省的UNION结果不包含重复的行。
• 同一个SELECT语句中的多个UNION操作符是从左向右计算的,除非用圆括弧进行了标识。
INTERSECTINTERSECT计算多个SELECT语句返回行集合的交集,不含重复
的记录。

一般形式:select_statement INTERSECT select_statement
• select_statement可以是任何没有FOR UPDATE子句的SELECT语句。
• 同一个SELECT进行了标识。 语句中的多个INTERSECT操作符是从左向右计算的,除非用圆括弧
• 当对多个SELECT语句的执行结果进行UNION和INTERSECT操作的时候,会优先处
EXCEPTEXCEPT计算存在于左
边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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论