UNION 和 UNION ALL 區(qū)別

1.UNION 和 UNION ALL

UNION去重且排序,UNION ALL不去重不排序

Union因為要進(jìn)行重復(fù)值掃描,所以效率低。如果合并沒有刻意要刪除重復(fù)行,那么就使用Union All

兩個要聯(lián)合的SQL語句 字段個數(shù)必須一樣,而且字段類型要“相容”(一致);

emp表


image.png

dept表


image.png
SELECT deptno FROM emp union select deptno from dept
image.png
SELECT DEPTNO FROM emp union ALL select deptno from dept
image.png
/*使用union和union all必須保證各個select 集合的結(jié)果有相同個數(shù)的列,并且每個列的類型是一樣的。
但列名則不一定需要相同,oracle會將第一個結(jié)果的列名作為結(jié)果集的列名。例如下面是一個例子:*/

select empno,ename from emp
union
select deptno,dname from dept

  • 另外擴(kuò)展2個待以后研究

Union:對兩個結(jié)果集進(jìn)行并集操作,不包括重復(fù)行,同時進(jìn)行默認(rèn)規(guī)則的排序;

Union All:對兩個結(jié)果集進(jìn)行并集操作,包括重復(fù)行,不進(jìn)行排序;

Intersect:對兩個結(jié)果集進(jìn)行交集操作,不包括重復(fù)行,同時進(jìn)行默認(rèn)規(guī)則的排序;

Minus:對兩個結(jié)果集進(jìn)行差操作,不包括重復(fù)行,同時進(jìn)行默認(rèn)規(guī)則的排序。

使用 UNION 而不是 UNION ALL,則很可能會進(jìn)行一次排序操作,以便刪除重復(fù)項。當(dāng)處理大
型結(jié)果集的時候要想到這一點(diǎn)。大體而言,使用 UNION 等同于針對 UNION ALL 的輸出結(jié)果
再執(zhí)行一次 DISTINCT 操作,

SELECT DISTINCT
  deptno 
FROM
  ( SELECT deptno FROM emp UNION ALL SELECT deptno FROM dept )
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容