union 和 union all 有什麼不同

2022-09-06 15:54:09 字數 1697 閱讀 7003

假設我們有乙個表 student, 包括以下欄位與資料:

drop table student;

create table student

( id

int primary key,

name nvarchar2(50) not null,

score number not null

);insert into student values(1,'aaron',78);

insert into student values(2,'bill',76);

insert into student values(3,'cindy',89);

insert into student values(4,'damon',90);

insert into student values(5,'ella',73);

insert into student values(6,'frado',61);

insert into student values(7,'gill',99);

insert into student values(8,'hellen',56);

insert into student values(9,'ivan',93);

insert into student values(10,'jay',90);

commit;

union 和 union all 的區別。

select *

from student

where id < 4

union

select *

from student

where id > 2 and id < 6

結果將是

1 aaron 78

2 bill 76

3 cindy 89

4 damon 90

5 ella 73

如果換成 union all 連線兩個結果集, 則返回結果是:

1 aaron 78

2 bill 76

3 cindy 89

3 cindy 89

4 damon 90

5 ella 73

可以看到, union 和 union all 的區別之一在於對重複結果的處理。

union

在進行表鏈結後會篩選掉重複的記錄, 所以在表鏈結後會對所產生的結果集進行排

序運算, 刪除重複的記錄再返回結果。 實際大部分應用中是不會產生重複的記錄, 最常見的

是過程表與歷史表

union

。 如:

select * from gc_dfys

union

select * from ls_jg_dfys

這個 sql 在執行時先取出兩個表的結果, 再用排序空間進行排序刪除重複的記錄, 最

後返回結果集, 如果表資料量大的話可能會導致用磁碟進行排序。

而 union all

只是簡單的將兩個結果合併後就返回。 這樣, 如果返回的兩個結果集中有

重複的資料, 那麼返回的結果集就會包含重複的資料了。

從效率上說,

union all

要比 union

快很多, 所以, 如果可以確認合併的兩個結果集

中不包含重複的資料的話, 那麼就使用

union all

Union和Union All到底有什麼區別

以前一直不知道union和union all到底有什麼區別,今天來好好的研究一下,網上查到的結果是下面這個樣子,可是還是不是很理解,下面將自己親自驗證 union 對兩個結果集進行並集操作,不包括重複行,同時進行預設規則的排序 union all 對兩個結果集進行並集操作,包括重複行,不進行排序 下...

Union和Union All到底有什麼區別

以前一直不知道union和union all到底有什麼區別,今天來好好的研究一下,網上查到的結果是下面這個樣子,可是還是不是很理解,下面將自己親自驗證 union 對兩個結果集進行並集操作,不包括重複行,同時進行預設規則的排序 union all 對兩個結果集進行並集操作,包括重複行,不進行排序 下...

Union和Union All到底有什麼區別

以前一直不知道union和union all到底有什麼區別,今天來好好的研究一下,網上查到的結果是下面這個樣子,可是還是不是很理解,下面將自己親自驗證 union 對兩個結果集進行並集操作,不包括重複行,同時進行預設規則的排序 union all 對兩個結果集進行並集操作,包括重複行,不進行排序 下...