Oracle 查詢練習 基於scott中自帶表格

--1.查詢平均工資最高的部門的部門編號,部門名稱,和該部門的平均工資

--第一種

select * from

(select emp.deptno no,dept.dname name,avg(sal) avgsal

 from emp,dept

 where emp.deptno=dept.deptno

 group by (emp.deptno,dept.dname))

 where avgsal=

(select max(AVGSAL) from

 (select emp.deptno no,dept.dname name,avg(sal) avgsal

 from emp,dept

 where emp.deptno=dept.deptno

 group by (emp.deptno,dept.dname)))

--第二種

select * from

 (select emp.deptno no,dept.dname name,avg(sal) avgsal

 from emp,dept

 where emp.deptno=dept.deptno

 group by (emp.deptno,dept.dname) order by avgsal desc) where rownum=1

 

--2 查詢所有員工的年薪,所在部門的名稱,結果按年新低到高排列

select empno,ename,sal,dname

 from emp,dept

 where emp.deptno=dept.deptno

 order by sal  

 

--3查詢每種工作的工作名稱,最低工資,領取該最低工資員工的姓名

select ename,e.job,e.sal from emp e,(select job,min(sal) minsal

 from emp  

 group by deptno,job) t where e.job=t.job and e.sal=t.minsal

 

--4查詢出管理員工人數最多的人和他管理的人的名字

select t.ename mgr,e.ename from emp e,

 (select empno,ename from emp e,

  (select mgr,count(mgr) num from emp group by mgr order by num desc) t

  where e.empno=t.mgr and rownum=1) t

 where e.mgr = t.empno

 

--5查詢所有員工的編號、姓名,及其上級領導的編號、姓名。顯示結果按領導的年薪降序排列

select t1.empno,t1.ename,t1.mgr,t2.sal mgrsal from emp t1,emp t2

where t1.mgr=t2.empno order by mgrsal desc

 

--6查詢所有領取獎金和不領取獎金的員工人數、平均工資;查詢結果的列名分別爲:人數、平均工資;第一行爲有獎金的員工,第二行爲沒有獎金的員工

 

select count(*) 人數,avg(sal) 平均工資 from

(select sal,comm,nvl2(comm,1,0) nvl from emp)

group by nvl order by nvl desc

 

--7查詢工資不超過2500的人數最多的部門名稱和該部門工資不超過2500的員工的員工人數

select * from

 (select count(*) num,emp.deptno,dname from emp,dept

  where emp.deptno=dept.deptno and sal<2500

  group by emp.deptno,dname order by num desc)

where rownum=1

 

--8查詢受僱日期早於其直接上級的所有員工的編號,姓名,部門名稱

select t.empno,t.ename,d.dname from dept d,

(select t1.empno,t1.ename,t1.deptno from emp t1,emp t2

 where t1.mgr=t2.empno and t2.hiredate>t1.hiredate) t

where d.deptno=t.deptno

 

--9查詢至少有4個員工的部門的部門名稱

select dname from emp,dept where emp.deptno=dept.deptno

group by dept.deptno,dept.dname having count(*)>=4

 

--10查詢工資比“SMITH”高的員工的基本信息

select * from emp

where sal>(select sal from emp where ename='SMITH')

 

--11查詢部門名稱中帶'S'字符的部門的員工的工資總和部門人數,顯示結果爲部門名稱,部門員工的工資總和,部門人數

select dname,sum(sal),count(emp.deptno)

 from emp,dept

 where dname like '%S%' and emp.deptno=dept.deptno

 group by dept.dname

 

--12查詢所有從事"CLERK"工作的僱員所在部門的部門名稱、部門裏的人數

select dname,count(*) num from emp e,dept d

where e.deptno=d.deptno and job='CLERK' group by dname

 

--13查詢僱員領導的基本信息,要求領導的薪水要超過3000

select * from emp where empno in

(select t1.mgr from emp t1,emp t2

where t1.mgr=t2.empno and t2.sal>3000)

 

--14查詢在"sales"部門(銷售部)工作的員工的姓名

select ename from emp e,dept d

where e.deptno=d.deptno and dname='SALES'

 

--15查詢工資高於30號部門的所有員工的工資的員工姓名、工資及部門名稱

select ename,sal,dname from emp e,dept d

where e.deptno=d.deptno

and sal>all(select sal from emp where deptno=30)

 

--16查詢所有部門的詳細信息(部門編號、部門名稱)和部門人數

select d.deptno,d.dname,count(*) num from emp e,dept d

where e.deptno=d.deptno group by d.deptno,d.dname

 

--17顯示每個部門中每個崗位的平均工資、每個部門的平均工資、每個崗位的平均工資(沒看懂題目要求,好像有點問題)

select dname,j.job,djavgsal,davgsal,javgsal from

  (select d.dname,job,djavgsal,davgsal from

    (select d.dname,e.job,avg(sal) djavgsal from emp e,dept d

    where e.deptno=d.deptno group by d.deptno,d.dname,e.job) dj

  full outer join

    (select d.dname,avg(sal) davgsal from emp e,dept d

    where e.deptno=d.deptno group by d.deptno,d.dname) d

  on (dj.dname=d.dname)) dj

full outer join

  (select job,avg(sal) javgsal from emp e,dept d

  where e.deptno=d.deptno group by job) j

on (dj.job=j.job)

 

--18顯示與"BLAKE"同部門的所有員工的基本信息,但不顯示"BLAKE"的基本信息

select * from emp

where deptno in (select deptno from emp where ename='BLAKE')

and ename!=(select ename from emp where ename='BLAKE')

 

--19查詢出“KING”所在部門的部門編號、部門名稱以及該部門裏的員工人數

 

select d.deptno,dname,count(ename) from emp e, dept d where

e.deptno=d.deptno and

d.deptno=(select deptno from emp where ename='KING') group by dname,d.deptno

 

--20查詢出"WARD"所在部門的工作年限最大的員工的姓名

select ename from emp where hiredate=(

select max(hiredate) from emp where

deptno=(select deptno from emp where ename='WARD'))

and deptno=(select deptno from emp where ename='WARD')

 

--21查詢出沒有下屬的員工的姓名及他的職位

 select ename,job from emp where empno not in

(select mgr from emp where mgr is not null)

 

--22查詢出員工姓名以A開頭的人數最多的部門的部門名稱

select dname from(select count(ename) a ,dname from emp e,dept t

where e.deptno=t.deptno and ename like 'A%' group by dname order by a desc)

where rownum=1

 

--23查詢出SMITH所在部門的部門名稱、部門工資的平均值

 select avg(sal),dname from emp e,dept t

 where e.deptno=t.deptno and dname=

 (select dname from emp e,dept t where e.deptno=t.deptno and ename='SMITH' )

 group by dname

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章