在 Oracle PL/SQL 中,
union 與 union all 的結果, 可能會不盡相同,
在此說明一下兩者的差異 :
* SQL1 union SQL2 : SQL1+SQL2 後的資料會自動重新排序, 且 SQL1 與 SQL2 的重複資料只顯示一筆.
* SQL1 union all SQL2 : SQL1+SQL2 後資料不會自動重新排序, 且 SQL2 資料直接銜接到 SQL1 資料之後, 也就是 SQL1 與 SQL2 可以有重複資料.
參考範例, 如下 :
程式碼
-- 建立 Temp Table
create table tom1(
aa number
, bb varchar2(100)
);
-- 新增 Temp Data
insert into tom1 values( 1, 'b' );
insert into tom1 values( 1, 'a' );
insert into tom1 values( 2, 'x' );
insert into tom1 values( 2, 'y' );
insert into tom1 values( 2, 'a' );
insert into tom1 values( 2, 'b' );
commit;
-- 利用 union 取得資料
select bb
from tom1
where aa = 1
union
select bb
from tom1
where aa = 2;
-- 執行結果, 共有 4 筆
a
b
x
y
-- 利用 union all 取得資料
select bb
from tom1
where aa = 1
union all
select bb
from tom1
where aa = 2;
-- 執行結果, 共有 6 筆
b
a
x
y
a
b