標籤:
多個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 TABLEtest=# create table tbl_test2(test(# e int,test(# f varchar(10),test(# g varchar(32)test(# );CREATE TABLEtest=# insert into tbl_test1(a,b,c) values (1,‘HA‘,‘12‘),(2,‘ha‘,‘543‘);INSERT 0 2test=# 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)
postgresql----UNION&&INTERSECT&&EXCEPT