zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

postgresql—-UNION&&INTERSECT&&EXCEPT详解数据库

数据库postgresql 详解 &# 8212 038 union except
2023-06-13 09:20:11 时间

多个SELECT语句可以使用UNION,INTERSECT和EXCEPT进行集合处理,其中UNION用于求并集,INTERSECT用于求交集,EXCEPT用于求差集。用法如下

query1 UNION query2 

query1 INTERSECT query2

query1 EXCEPT query2

 

其中query1和query2的SELECT子句中字段个数必须相同,且对应的数据类型必须相同(如果int和bigint结果取bigint,varchar(5)和varchar(10)结果取varchar(10)),字段名可以不同,但是最终结果会以第一个SELECT子句中字段名称返回。

测试表:

 

test=# create table tbl_test1( 

test(# a int, 

test(# b varchar(10), 

test(# c varchar(5) 

test(# ); 

CREATE TABLE 

test=# create table tbl_test2( 

test(# e int, 

test(# f varchar(10), 

test(# g varchar(32) 

test(# ); 

CREATE TABLE 

test=# insert into tbl_test1(a,b,c) values (1,HA,12),(2,ha,543); 

INSERT 0 2 

test=# insert into tbl_test2(e,f,g) values (1,HA,dh),(3,hk,76sskjhk); 

INSERT 0 2

 

 

 

一.UNION

两个查询使用UNION的结果使用图片表示如下:

postgresql----UNION INTERSECT EXCEPT详解数据库

 

UNION默认会去重,即重复数据只会返回一行,如果需要保留重复数据所有行可以使用UNION ALL。

示例1.

test=# select a,b from tbl_test1 union select e,f from tbl_test2 ; 

 a | b 

---+---- 

 3 | hk 

 1 | HA 

 2 | ha 

(3 rows)

 

示例2.

test=# select a,b from tbl_test1 union all select e,f from tbl_test2 ; 

 a | b 

---+---- 

 1 | HA 

 2 | ha 

 1 | HA 

 3 | hk 

(4 rows)

示例3.

test=# select a,c from tbl_test1 union all select e,g from tbl_test2 ; 

 a | c 

---+---------- 

 1 | 12 

 2 | 543 

 1 | dh 

 3 | 76sskjhk 

(4 rows)

 

二.INTERSECT

两个查询使用INTERSECT求交集的结果使用图片表示如下:

postgresql----UNION INTERSECT EXCEPT详解数据库

 

示例1.

test=# select a,b from tbl_test1 intersect select e,f from tbl_test2 ; 

 a | b 

---+---- 

 1 | HA 

(1 row)

 

三.EXCEPT

两个查询使用EXCEPT(A EXCEPT B)求差集的结果:

postgresql----UNION INTERSECT EXCEPT详解数据库

 

示例1.

test=# select a,b from tbl_test1 except select e,f from tbl_test2 ; 

 a | b 

---+---- 

 2 | ha 

(1 row)

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/4872.html