ORACLE中union/union all/Intersect/Minus用法

還不算暈發表於2013-11-01

Union,對兩個結果集進行並集操作,不包括重複行,同時進行預設規則的排序;

Union All,對兩個結果集進行並集操作,包括重複行不進行排序

Intersect,對兩個結果集進行交集操作,不包括重複行,同時進行預設規則的排序;

Minus,對兩個結果集進行差操作,不包括重複行,同時進行預設規則的排序。

order by子句必須寫在最後一個結果集裡,並且其排序規則將改變操作後的排序結果;並且對於Union、Union All、Intersect、Minus都有效。

表頭會用第一個連線塊的欄位

1.Union

union用法中,兩個select語句的欄位型別匹配,而且欄位個數要相同.

UNION連線的兩個表是同一表,使用UNION會過濾重複行,顯示的是一張表的資料。

下面SQL查詢語句中兩個表完全一樣,所以查詢顯示的是單張表的資訊。

SCOTT@bys1>select deptno,dname as "aa",loc from dept union select deptno,dname,loc from dept;
    DEPTNO aa             LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

2.Union All

UNION ALL,它的用法和union一樣,只不過union含有distinct的功能,它會把兩張表了重複的記錄去掉,

而union all不會,所以從效率上,union all 會高一點,但在實際中用到的並不是很多.
效率上說,UNION ALL 要比UNION快很多,所以,如果可以確認合併的兩個結果集中不包含重複的資料的話,那麼就使用UNION ALL。
儘量使用union all,因為union需要進行排序,去除重複記錄,效率低。 

下面SQL查詢語句中兩個表完全一樣,所以查詢顯示了兩次表內資訊。

SCOTT@bys1>select deptno,dname,loc as "aa" from dept union allselect deptno,dname,loc as "bb" from dept;
    DEPTNO DNAME          aa
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

3.Intersect

對兩個結果集進行交集操作,不包括重複行,同時進行預設規則的排序;返回兩個表共同含有的資料,取出交集作為最終的返回結果。

下面SQL查詢語句中兩個表完全一樣,所以查詢顯示的是單張表的資訊。
SCOTT@bys1>select deptno,dname,loc as "aa" from dept intersect select deptno,dname,loc as "bb" from dept;
    DEPTNO DNAME          aa
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

4.Minus

對兩個結果集進行差操作,不包括重複行,同時進行預設規則的排序。

第一個結果集減去第二個結果集中的內容,所剩餘的內容作為最終的返回結果。

下面SQL查詢語句中兩個表完全一樣,所以查詢顯示無資訊。

SCOTT@bys1>select deptno,dname,loc as "aa" from dept minus select deptno,dname,loc as "bb" from dept;

no rows selected

相關文章