oracle中union和union all的區別和使用

在使用sql語句時,我們會經常使用到union和union all兩個語法,這兩個的用法其實是不同的,今天我們來看看他們有什麼區別

工具/原料

oracle資料庫

方法/步驟

步驟一:首先手下連個關鍵字的區別

union: 對兩個結果集進行並集操作, 不包括重複行,相當於distinct, 同時進行默認規則的排序;

union all: 對兩個結果集進行並集操作, 包括重複行, 即所有的結果全部顯示, 不管是不是重複;

步驟二:通過實驗來看看,首先創建數據

drop table student2;

create table student2

(

id int primary key,

name varchar2(50) not null,

age number not null

);

insert into student2 values(1,'張三',23);

insert into student2 values(2,'李四',21);

insert into student2 values(3,'王二',20);

insert into student2 values(4,'郭經',20);

insert into student2 values(5,'王偉',23);

insert into student2 values(6,'Frado',24);

insert into student2 values(7,'伍梅',23);

insert into student2 values(8,'張倫',23);

insert into student2 values(9,'郭飛',21);

insert into student2 values(10,'劉鵬飛',22);

commit;

步驟三:區別1

-- union

select * from student2 where id < 4

union

select * from student2 where id > 2 and id < 6

看到結果中ID=3的只有一條

-- union all 

select * from student2 where id < 4

union all

select * from student2 where id > 2 and id < 6

結果中ID=3的結果有兩個union和union all的區別在於union all取結果的交集之後不會進行去重

步驟四:區別二

-- union all

select * from student2 where id > 2 and id < 6

union all

select * from student2 where id < 4

-- union

select * from student2 where id > 2 and id < 6

union

select * from student2 where id < 4

從結果中可以看到union還對獲取的結果進行排序操作

步驟五:總結:union all只是合併查詢結果,並不會進行去重和排序操作,在沒有去重的前提下,使用union all的執行效率要比union高

注意事項

喜歡記得點讚,你的認可是我創作的動力

本文內容整理自網絡, 文中所有觀點看法不代表淘大白的立場