9、取得薪水最高的前五名員工
select sal,ename
from emp
order by sal desc limit 5;
10、取得薪水最高的第六名道第十名員工的姓名
select ename,sal
from emp order by sal desc limit 5,5;
11乓土、取得最后入職的五名員工(hiredate入職日期)
select ename ,hiredate
from emp
order by hiredate desc limit 5;
12 怕敬、取得每個薪水等級有多少員工
第一步:找出每個員工的薪水等級
select e.ename,e.sal,s.grade
from emp e join salgrade s on e.sal between s.losal and s.hisal;
第二部:在以上的結(jié)果的基礎(chǔ)上按grade分組诗轻,計數(shù)
select s.grade 贮聂,count(*)
from emp e
join salgrade s
on e.sal between s.losal and s.hisal
group by grade
13、面試題
有三張表S(學(xué)生表)认臊,C(課程表)圃庭,SC表(學(xué)生選課表)
S(SNO,SNAME)代表(學(xué)號,姓名)
C(CNO剧腻,CNAME拘央,CTEACHER)代表(課號,課名书在,教師)
SC(SNO灰伟,CNO,SCGRADE)代表(學(xué)號儒旬,課號栏账,成績)
問題:
1、找出沒選過“黎明”老師的所有學(xué)生姓名栈源。
第一步:找出黎明老師所授課的課程編號
select cno from c where cteacher='黎明'
第二部:通過‘學(xué)生選課表’查詢 . cno= 上面結(jié)果 的sno,這些cno都是選擇黎明老師課程學(xué)生的學(xué)號
select sno from sc where cno=(select cno from c where cteacher='黎明 ’)‘
第三部:在學(xué)生表中查詢sno not in 上面的結(jié)果
select sname from s where sno not in (select sno from sc where cno=(select cno from c where cteacher='黎明 ’);2挡爵、列出2們以上(含2們)不及格學(xué)生姓名及平均成績
第一步:列出兩門以上不及格的學(xué)生姓名
select sc.sno s.name
from sc
join s
on sc.sno=s.sno
where sc.scgrade<60
group by s.sname,sc.sno
having count()>=2;(表T1)
第二步:找出每個學(xué)生的平均成績(按序;學(xué)號分組求平均值)
select sno,avg(scgrade) as avgscore from sc group by sno甚垦;(表T)
第三步:第一步和第二步聯(lián)合
select t1.sname,t2,avgscore
from (select sc.sno,s.sname
from sc join s
on sc.sno=s.sno
where sc.scgrade<60
group by
sc.sno,s.name
having count()>=2) t1
join (select sc.sno,avg(sc.scgrade)as avgscore from sc group by sc.sno) t2
on t1.sno=t2.sno;`3茶鹃、即學(xué)過1號課程又學(xué)過2號課程所有學(xué)生的姓名
第一步:找出學(xué)過1號課程的學(xué)生
select sno from sc where cno=1;
第二步:找出學(xué)過2號課程的學(xué)生
select sno from sc where cno=2;
第三步:第一步聯(lián)合第二步
select s.sname from sc join s on sc.sno=s.sno where cno=1 and sno in(select sno from sc where cno=2);
14、列出所有員工及領(lǐng)導(dǎo)的姓名
emp a<員工表>
emp b<領(lǐng)導(dǎo)表>
select a.name empname ,b.name leadername
from emp a
left join emp b
on a.mgr=b.empno
15艰亮、列出受雇日期早于其直接上級的所有員工的編號闭翩,姓名,本門名稱
emp a<員工表>
emp b<領(lǐng)導(dǎo)表>
select
a.empno '員工編號‘ 迄埃,a.ename '員工姓名‘疗韵,a.hiredate '員工入職日期‘ , b.empno '領(lǐng)導(dǎo)編號' ,b.ename '領(lǐng)導(dǎo)姓名',b.hiredate '領(lǐng)導(dǎo)入職日期',d.dname
from emp a
join emp b
on a.mgr =b.empno
join dept d
on a.deptno=d.deptno
where a.hiredate<b.hiredate
16调俘、列出部門名稱和這些部門的員工信息伶棒,同時列出哪些沒有員工的部門 emp e<員工表> dept d<部門表>
select e.*,d.dname
from emp e
right join dept d
on e.deptno=d.deptno;
17 、列出至少有5個員工的部門【部門詳細信息】 ;emp e<員工表> dept d<部門表>
select d.deptno,d.dname,d.loc ,count(e.ename)
from emp e
join dept b
on e.deptno=d.depgno
group by
d.deptno,d.dname,d.loc
having count(e.ename)>=5;
18彩库、列出薪金比“smith”多的所有員工信息
select *from emp
where sao>(select sal from emp where ename='smith');
19、列出所有辦事員(CLERK)的姓名及其部門名稱先蒋,部門的人數(shù)
第一步:select e.ename,d.dname from dept d join emp e on e.deptno=d.deptno where e.job='CLERK'
第二步:select deptno ,count() as totalEmp
from emp e group by deptno
第三步:
select
e.ename ,d.dname,t.totalEmp
from
dept d
join
emp e
on
e.deptno=d.deptno
join
(select deptno ,count() as totalEmp
from emp e group by deptno) t
on d.deptno=e.deptno
where
e.job="CLERK'
20骇钦、列出最低薪金大于1500的各種工作及從事此工作的全部雇員人數(shù)。
select min(sal),count(job),job
from emp
where min(sal)>1500
21竞漾、列出在部門“SALES”<銷售部>工作的員工姓名眯搭,假定不知道銷售部的部門編號
select ename from emp where deptno=(select deptno from dept where dname="SALES");
列出薪金高于公司平均薪金的所有員工,所在部門业岁,上級領(lǐng)導(dǎo)鳞仙,雇員的工資等級
emp a <員工表>
emp b <領(lǐng)導(dǎo)表>
emp d<部門表>
salgrade s <工資等級表>
select
a.enam empname ,d.dname.b,ename,leadername,s.grade
from
emp a
join
dept d
on
a.deptno=d.deptno
join
emp b
on a.mgr = b.empno
join
salgrade s
on
a.sal between s.losal and s.hisal
where
a.sal >(select avg(sal) from emp);
23、 列出與“SCOTT”從事相同工作的所有員工及部門名稱
select
e.ename, e.job,d.dname
from
emp e
join dept d
on . e.deptno=d.deptno
where e.job=(select job from emp where ename='SCOTT");
24笔时、列出薪金等于部門30中員工的薪金的其他員工的姓名和薪金
selet distinct sal from emp where deptno=30;
select ename ,sal from emp where sal in(select distinct sal from emp where deptno=30)and deptno<>30;
25棍好、列出薪金高于在部門30工作的所有員工的薪金的員工姓名和薪金,部門名稱;
select max(sal) from emp where deptno=30;
select e.ename,e.sal,d.dname
from emp e
join dept d
on e.deptno =d.deptno
where e.sal>(select max(sal) from emp where deptno=30);