postgresql----UNION&&INTERSECT&&EXCEPT


多個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的結果使用圖片表示如下:

 

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求交集的結果使用圖片表示如下:

 

示例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)求差集的結果:

 

示例1.

test=# select a,b from tbl_test1 except select e,f from tbl_test2 ;
 a | b  
---+----
 2 | ha
(1 row)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM