Oracle練習題
姓名: __________ 分數: _______
1. 構造SQL語句,列出在1981年入職的員工的姓名、入職時間和月收入(薪水和獎金之和),並將入職時間顯示爲:”1981年10月10日”這種形式,月收入顯示爲”$12,345.67”這種形式。
select to_char(hiredate, 'yyyy') ename,
to_char(hiredate, 'yyyy') || '年' || to_char(hiredate, 'mm') || '月' ||
to_char(hiredate, 'dd') || '日',
to_char(sal + nvl(comm, 0), '$9,999,999.99')
from emp
where to_char(hiredate, 'yyyy') = '1982'
2. 列出職員表中員工的姓名、薪水、所屬部門名稱和薪水等級,並按照薪水由高到低排序。
select ename, sal, dname, grade
from emp a, dept b, salgrade c
where a.deptno = b.deptno
and c.losal < a.sal
and c.hisal > a.sal
order by 2;
3. 列出每個員工的名字(別名爲EMPLOYEE)及他們的直接領導的名字(別名爲MANAGER),如果某些員工沒有領導,則在其領導的位置上顯示“boss”。
select ename, nvl((select ename from emp b where a.mgr = b.empno), 'BOSS')
from emp a;
4. 查詢哪些職位的薪水總和大於5000元,列出這些職位和其薪水總和,並按薪水總和升值排序。
select job, sum(sal)
from emp a
group by a.job
having sum(sal) > 5000
order by sum(sal)
5. 查詢哪個部門的平均薪水比20部門的平均薪水低,列出這些部門的編號和平均薪水值。
select deptno, avg(sal)
from emp a
group by a.deptno
having avg(sal) < (select avg(sal)
from emp a
group by a.deptno
having deptno = '20');
6. 查詢機構中薪水最低的五名員工,列出員工姓名和薪水值。
select *
from (select ename, sal from emp order by sal)
where rownum < 6
7. 按薪水從高到低排序,列出第5位到第8位員工的姓名、薪水和職位。
select e.*
from (select rownum rn, ename, sal
from (select * from emp order by sal desc)
where rownum < 9) e
where e.rn > 4
8. 列出部門名稱和該部門的員工信息,同時列出那些沒有員工的部門。
9. 列出最低薪金大於1500的各種工作。
select distinct job from emp where sal > 1500;
10. 查詢出薪水比本部門平均薪水高的員工信息。
select *
from emp a
where sal > (select avg(sal)
from emp b
group by deptno
having a.deptno = b.deptno)
11. 列出所有管理者的最低薪金。
select min(sal)
from (select * from emp where empno in (select mgr from emp))