Oracle经典子查询及分页基础详解
2012-07-21 23:18
736 查看
Oracle经典子查询及分页基础详解
一:
1.如何显示高于自己部门平均工资的员工的信息。
(1)查询出各个部门的平均工资和部门号。
select deptNO,avg(sal)mysal from emp group by deptNO;
(2)把上面的查询看成是一张子表。
select a2.ename,a2.sal,a2.deptNO,a1.mysal from emp a2,(select deptNO,avg(sal)mysal from emp group by deptNO) a1 where a2.deptNO=a1.deptNo and a2.sal>a1.mysal;
在from子句中使用子查询时,该子查询会被作为一个视图来对待,因此叫内嵌式视图,当在from子句中使用子查询时,必须给子查询指定别名。给表取别名不能加as。给列加别名可以加as。
2.oracle的分页一共有三种方式。(根据rowId,按分析函数来分,按rownum来分。)
(1) select a1.*,rownum rn from (select * from emp) a1;
注:rownum分页。rownum给每一行分配一个行号。
3.显示emp表的前十行:
(1)select a1.*,rownum rn from (select * from emp) a1 where rownum<=10;
(select * from emp)虚拟表可以看成个一个真实的表,where限制语句里面的条件需要是虚拟表里的面存在的。
注:这里rownum是红色部分表中隐含的列。可以通过下面查询语句进行验证
(2)select a2.*,rownum rn from (select a1.*,rownum from emp a1)a2 where rownum<=10;
注:这里rn不能做条件条件是之前就存在的,才能用作条件。
4.显示emp表5--10条:
select * from (select a1.*,rownum rn from (select * from emp) a1 where rownum<=10) where rn>=6;
注: rownum在子查询中where之后只能出现一次,where rownum>=5 and rownum<=10是错的。
5.指定查询列,只需修改最里层的子查询。
select * from (select a1.*,rownum rn from (select ename,sal from emp) a1 where rownum<=10) where rn>=6;
6.如何排序,只需修改最里层的子查询。
select * from (select a1.*,rownum rn from (select ename,sal from emp order by sal desc) a1 where rownum<=10) where rn>=6;
7.显示第四条到第九条:
select * from (select a1.*,rownum rn from (select ename,sal from emp order by sal desc) a1 where rownum<=9) where rn>=4;
查询其他的表的话,只可把表名给改了就行了。
8.显示emp表有多少行
select count(*)from emp;
9.用查询结果创建新表。这个命令是一种快捷的建表方法。
create table mytable(id,name,sal,job,deptNO) as select empNO,ename,sal,job,deptNO from emp;
10.合并查询。
union并集。该操作用于取得两个结果的并集。当使用该操作时,会自动去掉结果集中重复行。
select ename,sal,job from emp where sal>2500
union
select ename,sal,job from emp where job='MANAGER';
11.union all合并查询但不会去掉重复行。
12.minus,如果a包括b,那么显示a中除b的部分。
.
注:涉及子查询时.逻辑要清楚。根据查询语句相关的条件拆分分步击破。一层一层的由里到外击破。
一:
1.如何显示高于自己部门平均工资的员工的信息。
(1)查询出各个部门的平均工资和部门号。
select deptNO,avg(sal)mysal from emp group by deptNO;
(2)把上面的查询看成是一张子表。
select a2.ename,a2.sal,a2.deptNO,a1.mysal from emp a2,(select deptNO,avg(sal)mysal from emp group by deptNO) a1 where a2.deptNO=a1.deptNo and a2.sal>a1.mysal;
在from子句中使用子查询时,该子查询会被作为一个视图来对待,因此叫内嵌式视图,当在from子句中使用子查询时,必须给子查询指定别名。给表取别名不能加as。给列加别名可以加as。
2.oracle的分页一共有三种方式。(根据rowId,按分析函数来分,按rownum来分。)
(1) select a1.*,rownum rn from (select * from emp) a1;
注:rownum分页。rownum给每一行分配一个行号。
3.显示emp表的前十行:
(1)select a1.*,rownum rn from (select * from emp) a1 where rownum<=10;
(select * from emp)虚拟表可以看成个一个真实的表,where限制语句里面的条件需要是虚拟表里的面存在的。
注:这里rownum是红色部分表中隐含的列。可以通过下面查询语句进行验证
(2)select a2.*,rownum rn from (select a1.*,rownum from emp a1)a2 where rownum<=10;
注:这里rn不能做条件条件是之前就存在的,才能用作条件。
4.显示emp表5--10条:
select * from (select a1.*,rownum rn from (select * from emp) a1 where rownum<=10) where rn>=6;
注: rownum在子查询中where之后只能出现一次,where rownum>=5 and rownum<=10是错的。
5.指定查询列,只需修改最里层的子查询。
select * from (select a1.*,rownum rn from (select ename,sal from emp) a1 where rownum<=10) where rn>=6;
6.如何排序,只需修改最里层的子查询。
select * from (select a1.*,rownum rn from (select ename,sal from emp order by sal desc) a1 where rownum<=10) where rn>=6;
7.显示第四条到第九条:
select * from (select a1.*,rownum rn from (select ename,sal from emp order by sal desc) a1 where rownum<=9) where rn>=4;
查询其他的表的话,只可把表名给改了就行了。
8.显示emp表有多少行
select count(*)from emp;
9.用查询结果创建新表。这个命令是一种快捷的建表方法。
create table mytable(id,name,sal,job,deptNO) as select empNO,ename,sal,job,deptNO from emp;
10.合并查询。
union并集。该操作用于取得两个结果的并集。当使用该操作时,会自动去掉结果集中重复行。
select ename,sal,job from emp where sal>2500
union
select ename,sal,job from emp where job='MANAGER';
11.union all合并查询但不会去掉重复行。
12.minus,如果a包括b,那么显示a中除b的部分。
.
注:涉及子查询时.逻辑要清楚。根据查询语句相关的条件拆分分步击破。一层一层的由里到外击破。
相关文章推荐
- 详解Oracle的几种分页查询语句
- 详解Oracle的几种分页查询语句
- Oracle基础代码库:分页查询
- Oracle 中的 SQL 分页查询原理和方法详解
- Oracle中的SQL分页查询原理和方法详解
- Oracle中的SQL分页查询原理和方法详解
- 详解Oracle的几种分页查询语句
- Oracle分页查询的实例详解
- 详解Oracle的几种分页查询语句
- Oracle中的SQL分页查询原理和方法详解
- 详解Oracle的几种分页查询语句
- 详解Oracle的几种分页查询语句
- Oracle分页查询中排序与效率问题解决方法详解
- 详解Oracle的几种分页查询语句【转】
- 详解Oracle的几种分页查询语句
- 详解Oracle的几种分页查询语句
- mysql、mssql及oracle分页查询方法详解
- oracle 基础SQL语句 多表查询 子查询 分页查询 合并查询 分组查询 group by having order by
- java程序员菜鸟进阶(二)oracle基础详解(二)oracle查询语句和数据排序
- 详解Oracle的几种分页查询语句