Oracle複雜查詢(三)

weixin_33806914發表於2017-03-06

在from中使用子查詢:

如上例Oracle複雜查詢(二)最後一行,在from語句中使用子查詢時,該子查詢會被作為一個檢視來對待,因此叫做內嵌檢視,而且必須要給子查詢制定別名!!

【注意:在給列取別名時可以加as,而給表加別名不可加as】

分頁子查詢:Oracle一共有三種  1、rownum   2、分析函式    3、rowid效率最高

一、rownum分頁

第一步:先做子查詢:select * from  emp;

第二步:顯示rownum【oracle分配的】

select  a1.*,rownum  rn   from   (select * from emp)  a1;

第三步:顯示6到10 號的資料

  select  a1.*,rownum  rn   from   (select * from emp)  a1   where  rownum<=10; 【此處rownum不可用別名】

select * from ( select  a1.*,rownum  rn   from   (select * from emp)  a1   where  rownum<=10)  where  rn >=6;

【注意:不能直接寫成select  a1.*,rownum  rn   from   (select * from emp)  a1   where  rownum<=10 and  rownum>=6或者是用between  and,都不可以,oracle 的分頁一次只能使用一次,類似於二分法】



查詢的變化

a、指定查詢咧,只需要修改最裡層的子查詢

b、如何排序,只需要修改最裡層的子查詢


用查詢結果建立新表;

create table  mytable (id,name,sal,job,deptno)  as  select  empno,ename,sal,job,deptno,from emp;


合併查詢:【速度遠遠高於and,or等等】

有時候在實際應用中,為例合併多個select語句的結果,可以使用集合操作符union,union all ,intersect,minus;

(1)union  

該操作用於取得兩個結果集的並集,會自動去除結果集中的重複行,

select  ename  ,sal ,job  from  emp  where  sal >2500 union select  ename  ,sal ,job  from  emp  where  job ='manager'

(2)union all   與union相似,但不會取消重複行,而且不會排序。

select  ename  ,sal ,job  from  emp  where  sal >2500 union all   select  ename  ,sal ,job  from  emp  where  job ='manager'

(3)intersect

使用該操作符用於取得兩個結果集的交集

select  ename  ,sal ,job  from  emp  where  sal >2500  intersect select  ename  ,sal ,job  from  emp  where  job ='manager'

(4)minus

兩個結果集的差集,會顯示存在第一個集合中,而不存在第二個集合中的資料


相關文章