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语句练习的主要内容,如果未能解决你的问题,请参考以下文章

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段

Pikachu漏洞练习平台实验——SQL注入

sql语句练习

MySql练习---[SQL查询语句练习]

MySQL[练习]SQL 语句

复杂sql语句练习