Oracle复杂查询(三)

在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

两个结果集的差集,会显示存在第一个集合中,而不存在第二个集合中的数据


上一篇:异常类


下一篇:Oracle之 用户管理,表管理