oracle 复杂的查找用法
【第一题】: 找到员工表中工资最高的前三名,要求按如下格式输出(第一步部分);以及oracle查询结果指定分页显示的方法(第二部分)。

——涉及Top-N分析问题。
一般不在子查询中使用order by, 但在Top-N分析问题中,必须使用order by
想将现有的表进行分页。1-4第一页,5-8第二页……
参考内容:
行号rownum(伪列)需要注意的问题:
1. rownum永远按照默认的顺序生成。
SQL> select rownum, empno, ename, sal from emp order by sal desc
——发现行号是跟着行走的。查询结果顺序变了,行号依然固定在原来的行上。行号始终使用默认顺序。
2.rownum只能使用<, <=符号,不能使用>,>=符号。
原因:与行号生成的机制有关:Oracle中的行号永远从1开始——取了1才能取2,取了2才能取3,<=8可以是因为1234567挨着取到,而>=5不行,因为没有1234,不能直接取5。
第一部分:输出图片的效果;
SQL> select rownum, empno, ename, sal
from (select *
from emp
order by sal desc)
where rownum <=3 第二部分,对查询的内容进行分页显示:
1-4为一页;
select rownum, empno, ename, sal
from (select * from emp
order by sal desc)
where rownum<=4 and rownum>=1
/
5-8为一页
select *
from (select rownum r, empno, ename, sal
from (select * from emp
order by sal desc)
where rownum<=8)
where r >= 5 关键是>=5 的获取问题,是不能直接写rownum>=5的。但是这条SQL语句查询的结果是一个新的“集合”,
该集合中有一列是专门表示行号,可以假想这列不再是伪列,而是该集合中专门用来表示行号的列。
所以,可以给该列取一个别名r,并把该查询语句整体作为子查询,放到另外一条SQL语句的from后。
【第二题】找到员工表中薪水大于本部门平均薪水的员工

采用两种方法:
第一种:一般子查询,使用自连接(多表查询的一种特殊情况)
与第一题一样,别名的特殊用法;可以从子查询中带出来,当作一个元素来使用。
一般子查询的的执行顺序:先执行子查询(内查询),再执行主查询(外查询),相关子查询除外
第二种:使用相关子查询()
概念:将主查询的某个值,当作参数传递给子查询。
一.一般子查询
1 select empno, e.deptno, ename, sal , d.davg
2 from emp e, (select deptno, avg(sal) davg
3 from emp
4 group by deptno) d
5 where e.deptno = d.deptno and e.sal > d.davg 二.相关子查询
select empno, e.deptno, ename, sal , (select avg(sal) from emp where deptno = e.deptno group by deptno) as "avg"
from emp e
where sal>(select avg(sal) from emp
where deptno = e.deptno)
【第三题】统计每年入职的员工个数:以下图的格式展现:已知员工的入职年份是---1980,1981, 1982,1987;
提示:该练习只考察函数的应用,注意调用关系。

——decode():第一个参数:待判断的值,条件,结果,条件,结果……最后是else的情况。
以图中的格式输出
select count(*) Total,
sum(decode(to_char(hiredate, 'yyyy'), '', 1, 0)) "1981",
sum(decode(to_char(hiredate, 'yyyy'), '', 1, 0)) "1980",
sum(decode(to_char(hiredate, 'yyyy'), '', 1, 0)) "1982",
sum(decode(to_char(hiredate, 'yyyy'), '', 1, 0)) "1987"
from emp; 如忽略输出格式:(即不是图中的输出格式:) select to_char(hiredate ,'yyyy') as "年份", count(*) as "人数"
from emp
group by to_char(hiredate ,'yyyy')
oracle 复杂的查找用法的更多相关文章
- oracle之to_char,to_date用法
[转载自]http://www.jb51.net/article/45591.htm 这篇文章主要介绍了oracle中to_date详细用法示例,包括期和字符转换函数用法.字符串和时间互转.求某天是星 ...
- oracle中to_date详细用法示例(oracle日期格式转换)
这篇文章主要介绍了oracle中to_date详细用法示例,包括期和字符转换函数用法.字符串和时间互转.求某天是星期几.两个日期间的天数.月份差等用法 TO_DATE格式(以时间:2007-11-02 ...
- Oracle to_date()函数的用法
Oracle to_date()函数的用法 to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,供您参考学习. 在Orac ...
- Oracle 中 decode 函数用法
Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...
- Oracle trunc()函数的用法
Oracle trunc()函数的用法 /**************日期********************/1.select trunc(sysdate) from dual --2013-0 ...
- Oracle中group by用法
Oracle中group by用法 在select 语句中可以使用group by 子句将行划分成较小的组,一旦使用分组后select操作的对象变为各个分组后的数据,使用聚组函数返回的是每一个组的汇总 ...
- oracle获取本月第一天和最后一天及Oracle trunc()函数的用法
select to_char(trunc(add_months(last_day(sysdate), -1) + 1), 'yyyy-mm-dd') "本月第一天", to_cha ...
- oracle正则表达式regexp_like的用法详解
oracle正则表达式regexp_like的用法详解 /*ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与IN ...
- Oracle trunc()函数的用法--来着心静禅定ing
1.TRUNC(for dates) TRUNC函数为指定元素而截去的日期值. 其具体的语法格式如下: TRUNC(date[,fmt]) 其中: date 一个日期值 fmt 日期格式,该日期将由指 ...
随机推荐
- 20162318 2016-2017-2《Java程序设计》课堂实践项目
20162318 2016-2017-2<Java程序设计>课堂实践项目 String类的使用 在String类中有一种split的方法.它可以把字符串分割为好几个小的字符串. 实践内容: ...
- Java 导出大批量数据excel(百万级)(转载)
参考资料:http://bbs.51cto.com/thread-1074293-1-1.html http://bbs.51cto.com/viewthread.ph ...
- 基于 Dapper 的一个 DbUtils
/// <summary> /// v1.0 /// </summary> public partial class DbUtils { string ConnectionSt ...
- [典型漏洞分享]一个典型的软件漏洞--memcpy导致的缓冲区溢出
YS VTM模块存在缓冲区溢出漏洞,可导致VTM进程异常退出[高] 问题描述: YS VTM模块开放对外监听端口(8554和8664),并从外部接收网络数据,中间模块调用到memcpy函数对网络数据进 ...
- [Bug]IE11下,forms认证,出现无法保存cookie的问题
目录 ie11 解决方案 ie11 在ie11下,访问服务器上的网站地址,莫名其妙的多出一串东西,这一串字符串是由于客户端禁用cookie造成sessionid无法写入cookie,所以就拼在url上 ...
- 【web 回车】web项目 注册或登录页面 回车登录无效,解决方案
解决方案: /** * 登陆按钮的点击事件 */ $("#loginID").click(function(){ var username = $("#u"). ...
- 三大UML建模工具Visio、Rational Rose、PowerDesign
UML建模工具Visio .Rational Rose.PowerDesign的比较 应用最广的由两种种1. Rational Rose,它是ibm的 .2.Microsoft的 Microsoft ...
- Android内存优化7 内存检测工具1 Memory Monitor检测内存泄露
上篇说了一些性能优化的理论部分,主要是回顾一下,有了理论,小平同志又讲了,实践是检验真理的唯一标准,对于内存泄露的问题,现在通过Android Studio自带工具Memory Monitor 检测出 ...
- 16.同步类容器Collections.synchronized
voctor动态数组.同步类容器,底层实现基于:Collections.synchronized package demo5; import java.util.ArrayList; import j ...
- asp.net membership 修改密码
aspnet_Applications 存储数据库所涉及应用程序有关信息. aspnet_Membership 存储与用户相关信息例如:用户登陆密码,创建时间. aspnet_Paths 存储应用程序 ...