–1.取得最后入职的5名员工
select *
from (
select *
from emp
order by hiredate desc
)
where rownum<=5;
–2取得每个薪水等级有多少员工
select s.grade "工资等级",count(*) "人数"
from emp e,salgrade s
where sal between s.losal and s.hisal
group by s.grade
–3列出所有员工及直接上级的姓名
-- nvl(null,0) 如果为null 返回0
select e1.ename,nvl(e2.ename,'没有上级')
from emp e1,emp e2
where e1.mgr=e2.empno(+)
–4列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称
select e.empno, e.ename, d.dname from emp e,emp m ,dept d
where e.hiredate < m.hiredate
and
e.mgr = m.empno
and
e.deptno = d.deptno
–5列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门.
使用右连接 因为要显示的是部门名称(同时列出那些没有员工的部门) 就是现实全部的部门
select d.dname"部门名称" , e.*
from emp e,dept d
where e.deptno(+)=d.deptno
–6列出至少有一个员工的所有部门
select deptno ,count(ename)
from emp
group by deptno;
–7列出薪金比"SMITH"多的所有员工信息.
select *
from emp e
where e.sal>
(
select sal
from emp
where ename='SMITH'
)
–8 --列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数
select j.job,c.co
from
(select job
from emp
group by job
having min(sal)>1500)j
,
(select job, count(*) co
from emp
group by job) c
where j.job=c.job