關於Union和Union All的區別以及用法


      有些時候我們在查詢的時候會碰到這么一個問題,就是一條SQL不能查出來你想要的結果;首先,我們必須明確一條查詢SQL執行之后數據庫會給我們返回什么,他會返回符合條件的一個結果集,而當你一條查詢SQL不能解決的時候,就可以用兩條SQL去把兩個結果集拼出來,但是必須要保證兩個SQL的列名和個數一致.那么這個時候我們就需要用到Unicon All或者Union了

Union:對兩個結果集進行並集操作,不包括重復行,同時進行默認規則的排序; 

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

可以在最后一個結果集中指定Order by子句改變排序方式。

例如: 

select employee_id,job_id from employees 
union 
select employee_id,job_id from job_history 

以上將兩個表的結果聯合在一起。這兩個例子會將兩個select語句的結果中的重復值進行壓縮,也就是結果的數據並不是兩條結果的條數的和。如果希望即使重復的結果顯示出來可以使用union all,例如: 

2.在oracle的scott用戶中有表emp 
select * from emp where deptno >= 20 
union all 
select * from emp where deptno <= 30 
這里的結果就有很多重復值了。 

有關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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM