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