码迷,mamicode.com
首页 > 数据库 > 详细

SQL语句练习

时间:2016-10-23 23:28:41      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:decode   case   rac   ack   参数   font   creat   分页   create   

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语句练习

标签:decode   case   rac   ack   参数   font   creat   分页   create   

原文地址:http://www.cnblogs.com/glblog/p/5991270.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!