SQL语句练习
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL语句练习相关的知识,希望对你有一定的参考价值。
1.sql书写:(1)from 表 (2)where 条件 (3)select 列
2.rownum 行号(伪列)
1.1rownum永远按照默认的顺序生成,并不随着排序之后发生变化
1.2rownum 只能使用<,<=,不能使用>,>=
解释:oracle为行式数据库,永远第一行开始,一行行递增;>,>=就违背原则。
3.临时表
2.1 手动创建:create global temporary table ****
2.2 自动创建:order by
特点:当事务或者会话结束的时候,表中的数据自动删除
4.相关子查询:将主查询中的值,作为参数传递给子查询
3.使用rownum找到员工表中工资最高的前三名
--解题思路 --将查询出来的结果按照降序排列,从排序之后的结果集当中查询,得到的rownum经过排序 select rownum,empno,ename,sal from (select * from emp order by sal desc) where rownum<=3;
ROWNUM EMPNO ENAME SAL
------- ---------- ---------- ----------
1 7839 KING 5000
2 7788 SCOTT 3000
3 7902 FORD 3000
4.使用rownum进行分页
--解题思路:r 为e1的行号,为 e2的列,因为不是e2的行号,所以可以>=5 select e2.* from (select rownum r,e1.* from(select * from emp order by sal) e1 where rownum<=8 ) e2 where r>=5;
5.找到员工表中薪水大于本部门平均薪水的员工
--子查询 select e.empno,e.ename,e.sal,d.avgsal from emp e,(select deptno,avg(sal) avgsal from emp group by deptno) d where e.deptno=d.deptno and e.sal>d.avgsal;
--解题思路:相关子查询 select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal from emp e where sal>(select avg(sal) from emp where deptno=e.deptno);
5.统计每年入职的员工个数
--使用case when then select count(*) Total, sum(case to_char(hiredate,‘yyyy‘) when ‘1981‘ then 1 else 0 end) from emp; --使用decode select count(*) Total, sum(decode(to_char(hiredate,‘yyyy‘),‘1981‘,1,0)) "1981" from emp;
以上是关于SQL语句练习的主要内容,如果未能解决你的问题,请参考以下文章