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;

 

转载于:https://www.cnblogs.com/glblog/p/5991270.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值