如果需要將 兩個select語句的結果作爲一個整體顯示出來,我們就需要用到union 或union all關鍵字。
union (或稱爲聯合)的作用是將多個結果合併在一起顯示出來。
- union 去重且排序(取唯一值,記錄沒有重複)
- union all 不去重不排序(直接連接,取到得是所有值,記錄可能有重複)
union 語法:
[SQL 語句 1]
UNION
[SQL 語句 2]
例如:
SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2
union all 語法:
[SQL 語句 1]
UNION ALL
[SQL 語句 2]
例如:
SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2
union 和 union all 效率:
union 和 union all 關鍵字都是將兩個結果集合併爲一個,但這兩者從使用和效率上來說都有所不同。
從使用上說:
1、對重複結果的處理:union 在進行錶鏈接後會篩選掉重複的記錄,union all 不會去除重複記錄;
2、對排序的處理:union 將會按照字段的順序進行排序;union all 只是簡單的將兩個結果合併後就返回。
從效率上說:
union all 要比 union 快很多,所以,如果可以確認合併的兩個結果集中不包含重複數據且不需要排序時的話,那麼就使用union all。
注意:兩個要聯合的SQL語句字段個數必須一樣,而且字段類型要“相容”(一致);
union和union all關鍵字需要注意:
union 和 union all都可以將多個結果集合並,而不僅僅是兩個,可以將多個結果集串起來。
使用union和union all必須保證各個select 集合的結果有相同個數的列,並且每個列的類型是一樣的。但列名則不一定需要相同,oracle會將第一個結果的列名作爲結果集的列名。
例如:
select empno,ename from emp
union
select deptno,dname from dept;
我們沒有必要在每一個select結果集中使用order by子句來進行排序,我們可以在最後使用一條order by來對整個結果進行排序。例如:
select empno,ename from emp
union
select deptno,dname from dept
order by ename;