【第一题】: 找到员工表中工资最高的前三名,要求按如下格式输出(第一步部分);以及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 复杂的查找用法的更多相关文章

  1. oracle之to_char,to_date用法

    [转载自]http://www.jb51.net/article/45591.htm 这篇文章主要介绍了oracle中to_date详细用法示例,包括期和字符转换函数用法.字符串和时间互转.求某天是星 ...

  2. oracle中to_date详细用法示例(oracle日期格式转换)

    这篇文章主要介绍了oracle中to_date详细用法示例,包括期和字符转换函数用法.字符串和时间互转.求某天是星期几.两个日期间的天数.月份差等用法 TO_DATE格式(以时间:2007-11-02 ...

  3. Oracle to_date()函数的用法

    Oracle to_date()函数的用法 to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,供您参考学习. 在Orac ...

  4. Oracle 中 decode 函数用法

    Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...

  5. Oracle trunc()函数的用法

    Oracle trunc()函数的用法 /**************日期********************/1.select trunc(sysdate) from dual --2013-0 ...

  6. Oracle中group by用法

    Oracle中group by用法 在select 语句中可以使用group by 子句将行划分成较小的组,一旦使用分组后select操作的对象变为各个分组后的数据,使用聚组函数返回的是每一个组的汇总 ...

  7. oracle获取本月第一天和最后一天及Oracle trunc()函数的用法

    select to_char(trunc(add_months(last_day(sysdate), -1) + 1), 'yyyy-mm-dd') "本月第一天", to_cha ...

  8. oracle正则表达式regexp_like的用法详解

    oracle正则表达式regexp_like的用法详解 /*ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与IN ...

  9. Oracle trunc()函数的用法--来着心静禅定ing

    1.TRUNC(for dates) TRUNC函数为指定元素而截去的日期值. 其具体的语法格式如下: TRUNC(date[,fmt]) 其中: date 一个日期值 fmt 日期格式,该日期将由指 ...

随机推荐

  1. JVM命令-java服务器故障排查

    一.top(Linux命令) 执行top命令:    (查看进程15477的详细情况,下文用到) 系统信息(前五行): 第1行:Top 任务队列信息(系统运行状态及平均负载),与uptime命令结果相 ...

  2. HDU 3473 Minimum Sum(划分树)

    Minimum Sum Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  3. MathType中带上下标字符不对其

    如图,上面的好看,下面的就不好看的. 上面的图使用下图下面的形式,下面的图是用的是上面的形式. 如图可以看出,右侧的更好. 比如UiTVj这样的,需要分别都用下面的形式,不能UiT用上面的,Vj直接输 ...

  4. nodejs第一个练习:用Node.js建HTTP服务器

    这是官方的一个例子, 在F盘建立一个tinyphp.js文件,内容: var http = require('http'); http.createServer(function (req, res) ...

  5. SVM核技巧的经典解释

    支持向量机: Kernel by pluskid, on 2010-09-11, in Machine Learning     68 comments 本文是"支持向量机系列"的 ...

  6. [转]SQL Server 2005 Integration Services (SSIS) (3) - Business Intelligence Development Studio

    本文转自:http://blog.csdn.net/me_online/article/details/1546281 三,SQL Server Integration Services 开发环境– ...

  7. 【Python】装饰器实现日志记录

    好的日志对一个软件的重要性是显而易见的.如果函数的入口都要写一行代码来记录日志,这种方式实在是太低效了,但一直没有找到更好的方法.后来用python写一些软件,了解到python的装饰器功能时,突然人 ...

  8. 【Web】前台传送JSON格式数据到后台Shell处理

    1.js中的json对象和字符串之间的转化:http://www.oschina.net/code/snippet_175925_6288 代码片段: var obj = JSON.parse(des ...

  9. js 修改css属性值

    js不能修改样式表 但是可以修改元素:比如 <div id="test" class="star-rating"></div> 对于上面 ...

  10. 转: codereview工具之 review board 选型与实践

    转:ReviewBoard代码评审实践总结 http://my.oschina.net/donhui/blog/350074 svn与review board 结合实践 http://my.oschi ...