Oracle 合併查詢

2021-09-02 15:58:04 字數 1901 閱讀 1329

=== union 並集, intersect 交集, union all 並集+交集, minus差集

1.oracle minus關鍵字

sql中的minus關鍵字

sql中有乙個minus關鍵字,它運用在兩個sql語句上,它先找出第一條sql語句所產生的結果,然後看這些結果有沒有在第二個sql語句的結果中。如果有的話,那這一筆記錄就被去除,而不會在最後的結果中出現。如果第二個sql語句所產生的結果並沒有存在於第乙個sql語句所產生的結果內,那這筆資料就被拋棄,其語法如下:

[sql segment 1]

minus

[sql segment 2]

2.union all 關鍵字

在集合論中,兩個集合(集合a和集合b)的並集是乙個包含集合a和b中所有元素的集合。換句話說,如果乙個元素屬於任何乙個輸入集合,那麼它也屬於結果集。如圖所示。

對於集合運算,需要注意以下幾點:

參與集合運算的兩個查詢生成的結果集必須包含相同的列數,並且相應列必須具有相容的資料型別。

集合運算結果中的列名由第乙個查詢決定,因此,如果要為結果列分配別名,應該在第乙個查詢中分配相應的別名。

集合運算對行進行比較時,認為兩個null值相等。

union集合運算分為union all和union distinct兩種情形,它們的區別是union all會保留重複行,而union distinct會刪除重複行。下面用例子來說明。

回到頂部

union all

union all合併兩個集合,並保留重複行。關於union all需要注意以下幾點:

union all實際上不會對行進行比較,也不會刪除重複行,它只是做個合併的操作而已。

因為union all不會刪除重複行,所以它的結果是多集,而不是真正的集合,因為相同的行在結果中可能出現多次。

3.intersect(交集)集合運算

在集合論中,兩個集合(記為集合a和b)的交集是由既屬於a,也屬於b的所有元素組成的集合。

在t-sql 中,intersect 集合運算對兩個輸入查詢的結果集取其交集,只返回在兩個查詢結果集中都出現的行。

intersect distinct集合運算

intersect 集合運算在邏輯上首先刪除兩個輸入多集中的重複行(把多集變為集合),然後返回只在兩個集合中都出現的行。換句話說,如果乙個行在兩個輸入多集中都至少出現一次,那麼交集返回的結果中將包含這一行。

select c from a

intersect

select d from b

intersect all 集合運算

ansi sql 支援帶有all選項的intersect集合運算,但sql server 2008現在還沒有實現這種運算。

回憶一下 union all 集合運算中 all 關鍵字的含義:要求返回所有重複行。類似地,intersect all 集合運算中的 all 關鍵字也意味著不會刪除重複行。但intersect all 與union all有所不同:前者不會返回所有重複行,而只返回重複行數目較少的那個多集的所有重複行。換句話說,intersect all 運算不僅關心乙個行是否在兩個多集同時存在,還關心它在每個多集中出現的次數。就好像這個集合運算會查詢每行的每次匹配一樣。

select 

row_number() over(partition by country,region,city order by(select 0)) as rownum,

country,region,city

from dbo.employees

intersect

select

row_number() over(partition by country,region,city order by (select 0)),

country,region,city

from dbo.customers;

Oracle 表複雜查詢之多表合併查詢

本文使用到的是oracle資料庫scott方案所帶的表,scott是oracle資料庫自帶的方案,使用前請確保其解鎖 oracle合併查詢一共有四種方式,分別使用不同的關鍵字 union union all minus intersect 使用union all,表示取a b的合集,不過濾重複的資料...

查詢合併列

select c.gid,c.stuname,d.pargid,d.parname from2 select 3a.gid a.name asstuname 4from base user a5 asc6left join7 select 8a.gid b.pargid,9a.name asparn...

mysql 合併查詢

該操作符用於取得兩個結果集的並集。當使用該操作符時,會自動去掉結果集中重複行 mysql select ename,sal,job from emp where sal 2500 union select ename,sal,job from emp where job manager ename ...