在 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