MySQL学习笔记(十九)

190 阅读3分钟

这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战

5.6 — 5.10

 【习题6】取得平均薪水最高的部门的部门名称
  select d.dname from emp e join dept d  on e.deptno = d. deptno  group by e.deptno order by avg(e.sal) desc limit 1 ; 
  
 【习题7】求平均薪水的等级最低的部门的部门名称
  select d.dname  from emp e join dept d on e.deptno = d.deptno group by e.deptno order by avg(e.sal) asc limit 1; 
 ​
 【习题8】取得比普通员工(员工代码没有在 mgr 字段上出现的)的最高薪水还要高的领导人姓名
  select ename , sal from emp where sal > (select max(sal) from emp where empno not in(select distinct mgr from emp where mgr is not null ));
 ​
 【习题9】取得薪水最高的前五名员工
  select max(sal) from emp order by sal desc limit 5 ;
 ​
 【习题10】取得薪水最高的第六到第十名员工
  select max(sal) from emp order by sal desc limit 5 ,5 ;

5.11 — 5.15

 【习题11】取得最后入职的 5 名员工
  select ename , hiredate from emp order by hiredate desc limit 5; 
 ​
 【习题12】取得每个薪水等级有多少员工
  select s.grade , count(*) from emp e join salgrade s on e.sal between s.losal and s.hisal group by s.grade order by s.grade asc ;
 ​
 【习题13】面试题
 有 3 个表 S(学生表), C(课程表), SC(学生选课表)
 S( SNO, SNAME)代表(学号,姓名)95 / 103
 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】列出所有员工及领导的姓名
  select e.ename , ifnull(m.ename,'没有上级') from emp e join emp m on e.mgr = m.empno ;
 ​
 【习题15】列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称
  select e.empno , e.ename , d.dname from emp e join emp m on e.hiredate < m.hiredate and e.mgr = m.empno join dept d on e.deptno = d.deptno ;