MYSQL34道練習題

PS:代碼在最下面,題目轉自北京動力節點
1、取得每個部門最高薪水的人員名稱

2、哪些人的薪水在部門的平均薪水之上

3、取得部門中(所有人的)平均的薪水等級,如下:

4、不準用組函數(Max),取得最高薪水

5、取得平均薪水最高的部門的部門編號

6、取得平均薪水最高的部門的部門名稱

7、求平均薪水的等級最低的部門的部門名稱

8、取得比普通員工(員工代碼沒有在mgr字段上出現的)的最高薪水還要高的領導人姓名

9、取得薪水最高的前五名員工

10、取得薪水最高的第六到第十名員工

11、取得最後入職的5名員工

12、取得每個薪水等級有多少員工

13、面試題
有3個表S(學生表),C(課程表),SC(學生選課表)
S(SNO,SNAME)代表(學號,姓名)
C(CNO,CNAME,CTEACHER)代表(課號,課名,教師)
SC(SNO,CNO,SCGRADE)代表(學號,課號,成績)
問題:
1,找出沒選過“黎明”老師的所有學生姓名。
2,列出2門以上(含2門)不及格學生姓名及平均成績。
3,即學過1號課程又學過2號課所有學生的姓名。
請用標準SQL語言寫出答案,方言也行(請說明是使用什麼方言)。

CREATE TABLE SC
(
SNO VARCHAR(200),
CNO VARCHAR(200),
SCGRADE VARCHAR(200)
);

CREATE TABLE S
(
SNO VARCHAR(200 ),
SNAME VARCHAR(200)
);

CREATE TABLE C
(
CNO VARCHAR(200),
CNAME VARCHAR(200),
CTEACHER VARCHAR(200)
);

INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( ‘1’, ‘語文’, ‘張’);
INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( ‘2’, ‘政治’, ‘王’);
INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( ‘3’, ‘英語’, ‘李’);
INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( ‘4’, ‘數學’, ‘趙’);
INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( ‘5’, ‘物理’, ‘黎明’);
commit;

INSERT INTO S ( SNO, SNAME ) VALUES ( ‘1’, ‘學生1’);
INSERT INTO S ( SNO, SNAME ) VALUES ( ‘2’, ‘學生2’);
INSERT INTO S ( SNO, SNAME ) VALUES ( ‘3’, ‘學生3’);
INSERT INTO S ( SNO, SNAME ) VALUES ( ‘4’, ‘學生4’);
commit;

INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( ‘1’, ‘1’, ‘40’);
INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( ‘1’, ‘2’, ‘30’);
INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( ‘1’, ‘3’, ‘20’);
INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( ‘1’, ‘4’, ‘80’);
INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( ‘1’, ‘5’, ‘60’);
INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( ‘2’, ‘1’, ‘60’);
INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( ‘2’, ‘2’, ‘60’);
INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( ‘2’, ‘3’, ‘60’);
INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( ‘2’, ‘4’, ‘60’);
INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( ‘2’, ‘5’, ‘40’);
INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( ‘3’, ‘1’, ‘60’);
INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( ‘3’, ‘3’, ‘80’);
commit;

問題1.找出沒選過“黎明”老師的所有學生姓名。
即:

問題2:列出2門以上(含2門)不及格學生姓名及平均成績。

問題3:即學過1號課程又學過2號課所有學生的姓名。

14、列出所有員工及領導的姓名

15、列出受僱日期早於其直接上級的所有員工的編號,姓名,部門名稱

16、列出部門名稱和這些部門的員工信息,同時列出那些沒有員工的部門.

17、列出至少有5個員工的所有部門

18、列出薪金比"SMITH"多的所有員工信息.

19、列出所有"CLERK"(辦事員)的姓名及其部門名稱,部門的人數.

20、列出最低薪金大於1500的各種工作及從事此工作的全部僱員人數.

21、列出在部門"SALES"<銷售部>工作的員工的姓名,假定不知道銷售部的部門編號.

22、列出薪金高於公司平均薪金的所有員工,所在部門,上級領導,僱員的工資等級.

23、列出與"SCOTT"從事相同工作的所有員工及部門名稱.

24、列出薪金等於部門30中員工的薪金的其他員工的姓名和薪金.

25、列出薪金高於在部門30工作的所有員工的薪金的員工姓名和薪金.部門名稱.

26、列出在每個部門工作的員工數量,平均工資和平均服務期限.

27、列出所有員工的姓名、部門名稱和工資。

28、列出所有部門的詳細信息和人數

29、列出各種工作的最低工資及從事此工作的僱員姓名

30、列出各個部門的MANAGER(領導)的最低薪金

31、列出所有員工的年工資,按年薪從低到高排序

32、求出員工領導的薪水超過3000的員工名稱與領導名稱

33、求出部門名稱中,帶’S’字符的部門員工的工資合計、部門人數.

34、給任職日期超過30年的員工加薪10%.

/*1*/
select e.ename,e.sal,e.deptno
from 
	(select deptno,max(sal) maxsal
	from emp
	group by deptno)t
join emp e
on e.sal=t.maxsal and e.deptno=t.deptno;

/*2*/
select ename,sal
from emp e
join (select deptno,avg(sal) avgsal from emp group by deptno)t
on e.sal> t.avgsal and e.deptno=t.deptno;

/*3*/
select deptno,avg(grade)
from (select e.deptno,s.grade from emp e join salgrade s on e.sal between losal and hisal) t
group by deptno; 

/*4*/
select sal
from emp
order by sal desc
limit 1;

/*5*/
select t.deptno
from (select deptno,avg(sal) avgsal from emp group by deptno)t
order by t.avgsal desc
limit 1;

/*6*/
select d.dname
from (select deptno,avg(sal) avgsal from emp group by deptno)t
join dept d 
on t.deptno=d.deptno
order by t.avgsal desc
limit 1;

/*7*/
select dname
from (select deptno,avg(sal) avgsal from emp group by deptno) t
join dept d
on d.deptno=t.deptno
join salgrade s
on t.avgsal between s.losal and s.hisal
order by s.grade
limit 1;

/*8*/
select ename ,sal
from emp
where empno in (select distinct mgr from emp where mgr is not null)
and sal> (select max(sal) from emp where empno not in (select distinct mgr from emp where mgr is not null));

/*9*/
select ename,sal 
from emp
order by sal desc
limit 5;

/*10*/
select ename,sal 
from emp
order by sal desc
limit 5,5;

/*11*/
select ename,hiredate
from emp
order by hiredate desc
limit 5;

/*12*/
select grade,count(*)
from emp e
join salgrade s
on e.sal between s.losal and s.hisal
group by grade;

/*13*/

/*1)*/
select sname
from s
where sno not in (
	select sno
	from sc s 
	join c c 
	on s.cno=c.cno
	where c.cteacher='黎明'
 );

/*2)*/
select t.ssname,avg(sc.scgrade)
from (
	select s.sname ssname,s.sno ssno
	from s s
	join sc sc
	on s.sno = sc.sno
	where sc.scgrade<60
	group by sc.sno,s.sname
	having count(*)>=2
)t
join sc sc
on t.ssno=sc.sno;

/*3)*/
select sname
from s s
join (select sno from sc where cno='1')t
on s.sno=t.sno
join (select sno from sc where cno='2')tt
on t.sno=tt.sno;

/*14*/
select e.ename,e1.ename leadername
from emp e
left join emp e1
on e.mgr=e1.empno;

/*15*/
select e.empno,e.ename,d.dname
from emp e
join emp e1
on e.mgr=e.empno
join dept d
on d.deptno=e.deptno
where e.hiredate<=e1.hiredate;

/*16*/
select d.dname,e.empno,e.ename,e.job,e.mgr,e.hiredate,e.sal,e.comm,e.deptno
from emp e
right join dept d
on d.deptno=e.deptno
order by dname;

/*17*/
select d.dname,count(*)
from emp e
join dept d
on e.deptno=d.deptno
group by d.dname
having count(*)>=5;

/*18*/
select *
from emp
where sal>(select sal from emp where ename='SMITH');

/*19*/
select e.ename,d.dname,t.cc
from emp e 
join dept d
on e.deptno=d.deptno
join (select deptno,count(*) cc from emp group by deptno)t
on e.deptno=t.deptno
where e.job='CLERK';

/*20*/
select job,count(*)
from emp
group by job
having min(sal)>1500;

/*21*/
select e.ename
from emp e
join dept d
on e.deptno=d.deptno
where d.dname='SALES';

/*22*/
select e.ename as '姓名',d.dname as '部門名稱',e1.ename as '上級領導',s.grade as '工資等級' 
from emp e
left join emp e1
on e.mgr=e1.empno
join dept d 
on d.deptno=e.deptno
join salgrade s
on e.sal between s.losal and s.hisal
where e.sal>(select avg(sal) from emp);

/*23*/
select e.ename,d.dname
from emp e
join dept d
on e.deptno=d.deptno
where e.job = (select job from emp where ename='SCOTT') and e.ename !='SCOTT';

/*24*/
select ename,sal
from emp
where sal in (select sal from emp where deptno=30) and deptno!=30;

/*25*/
select e.ename,e.sal,d.dname
from emp e
join dept d
on e.deptno=d.deptno
where sal>(select max(sal) from emp where deptno=30) and e.deptno!=30;

/*26*/
select d.dname,count(e.empno),avg(e.sal),avg(date_format(now(),'%Y')-date_format(e.hiredate,'%Y')) avgdate
from emp e
join dept d
on e.deptno=d.deptno
group by d.dname;

/*27*/
select e.ename,d.dname,e.sal
from emp e
join dept d
on e.deptno=d.deptno;

/*28*/
select d.*,ifnull(t.c,0) '人數'
from dept d
left join (select deptno,count(*) c from emp group by deptno) t
on d.deptno=t.deptno;

/*29*/
select e.*
from emp e
join (select job,min(sal) minsal from emp group by job)t
on t.job = e.job and t.minsal=e.sal;

/*30*/
select deptno,min(sal)
from emp
where job='MANAGER'
group by deptno;

/*31*/
select ename,(sal+ifnull(comm,0))*12 income
from emp
order by income;

/*32*/
select e.ename,e1.ename as leadername
from emp e
left join emp e1
on e.mgr=e1.empno
where e1.sal>3000;

/*33*/
select d.dname,ifnull(sum(e.sal),0) sumsal,count(e.empno) 
from emp e
right join dept d
on d.deptno=e.deptno
where d.dname like '%S%'
group by d.dname;

/*34*/
update emp
set sal=sal*1.1
where (date_format(now(),'%Y')-date_format(hiredate,'%Y'))>30
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章