博客
关于我
MYSQL试题
阅读量:651 次
发布时间:2019-03-15

本文共 6621 字,大约阅读时间需要 22 分钟。

 

1、取得每个部门最高薪水的人员名称

 select

    e.ename,t.*

    from

    (select max(sal) as sal,deptno from emp group by deptno) t

    join

    emp e

    on

    e.deptno=t.deptno and e.sal=t.sal;

 

 

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

 select

    e.ename,e.sal

    from

    (select deptno,avg(sal) as sal from emp group by deptno) t

    join

    emp e

    on

e.deptno=t.deptno and e.sal>t.sal;

 

 

 

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

 

select

e.deptno,avg(s.grade)

from emp e

join

salgrade s

on

e.sal between s.losal and s.hisal

group by e.deptno;

 

 

 

 

4、不准用组函数(Max),取得最高薪水

select ename from emp order by sal desc limit 1;

自连接

 

5、取得平均薪水最高的部门的部门编号

 

select t.deptno from

   (select deptno,avg(sal) as avgsal from emp group by deptno) t

   where

   t.avgsal=(select max(t.avgsal)from (select deptno,avg(sal) as avgsal from emp group by deptno) t);

 

select deptno from emp group by deptno order by avg(sal) desc limit 1

 

6、取得平均薪水最高的部门的部门名称

select d.dname

from

(select t.deptno from

(select deptno,avg(sal) as avgsal from emp group by deptno) t

where

t.avgsal=(select max(t.avgsal)from (select deptno,avg(sal) as avgsal from emp group by deptno) t)) m

Join

dept d

on

m.deptno =d.deptno;

select d.dname

from

(select deptno from emp group by deptno order by avg(sal) desc limit 1) t

join

dept d

on

d.deptno=t.deptno;

 

7、求平均薪水的等级最低的部门的部门名称

select d.dname

from

(select t.*,s.grade from(select deptno ,avg(sal) as avgsal from emp group by deptno) t

 join

salgrade s

on

t.avgsal between s.losal and s.hisal order by s.grade limit 1) t

join

dept d

on

d.deptno=t.deptno;

(有问题)

 

 

8、取得比普通员工(员工代码没有在mgr字段上出现的)的最高薪水还要高的领导人姓名

 

select max(sal)from emp where empno not in(select distinct mgr from emp where mgr is not null)

select ename from emp where empno in(select distinct mgr from emp where mgr is not null);

 

select t.ename,t.sal

from

(select ename,sal from emp where empnoi n(select distinct mgr from emp where mgr is not null)) t

where

t.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 0,5;

 

 

 

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

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

 

 

11、取得最后入职的5名员工

select ename,hiredate from emp order by hiredate desc limit 0,5;

 

 

 

12、取得每个薪水等级有多少员工

select t.grade,count(*)

from

(select s.grade from

emp e

join

salgrade s

on

e.sal between s.losal and s.hisal) t

group by t.grade;

 

 

 

 

13、面试题

有3个表S(学生表),C(课程表),SC(学生选课表)

S(SNO,SNAME)代表(学号,姓名)  

C(CNO,CNAME,CTEACHER)代表(课号,课名,教师)

SC(SNO,CNO,SCGRADE)代表(学号,课号,成绩)

问题:

1,找出没选过“黎明”老师的所有学生姓名。

2,列出2门以上(含2门)不及格学生姓名及平均成绩。

3,即学过1号课程又学过2号课所有学生的姓名。

请用标准SQL语言写出答案,方言也行(请说明是使用什么方言)。

-----------------------------------------------------------------------------

(

  SNO      VARCHAR(200),

  CNO      VARCHAR(200),

  SCGRADE  VARCHAR(200)

);

 

(

  SNO    VARCHAR(200 ),

  SNAME  VARCHAR(200)

);

 

(

  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;

 

commit;

 

问题1.找出没选过“黎明”老师的所有学生姓名。

即:

 

 

 

问题2:列出2门以上(含2门)不及格学生姓名及平均成绩。

 

 

问题3:即学过1号课程又学过2号课所有学生的姓名。

 

 

 

 

14、列出所有员工及领导的姓名

select a.ename,b.ename

from

emp a

left join

emp b

on

a.mgr=b.empno;

 

 

15、列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称

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

from

(select a.empno,a.ename,a.deptno

from

emp a

join

emp b

on

a.hiredate<b.hiredate and a.mgr=b.empno) t

join

dept d

on

d.deptno=t.deptno;

 

16、列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门.

select d.dname,e.*

from

dept d

left join

emp e

on

d.deptno=e.deptno;

 

17、列出至少有5个员工的所有部门

select

d.dname,t.count

from

(select deptno,count(deptno) as count from emp group by deptno having count>=5) t

join

dept d

on

d.deptno=t.deptno;

 

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

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

 

19、列出所有"CLERK"(办事员)的姓名及其部门名称,部门的人数.

 

select e.ename,d.dname,t.cc

from

(select ename,deptno from emp where job='CLERK') e

join

dept d

on

d.deptno=e.deptno

join

( select deptno,count(deptno) as cc from emp group by deptno) t

on

t.deptno=e.deptno;

 

20、列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数.

select job,count(ename) from emp where sal>1500 group by job;

 

21、列出在部门"SALES"<销售部>工作的员工的姓名,假定不知道销售部的部门编号.

select t.ename from (select e.ename,d.dname from emp e join dept d on e.deptno=d.deptno) t where t.dname='SALES';

 

22、列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,雇员的工资等级.

select t.ename,d.dname,e.ename,s.grade

from

(select ename,deptno,sal,mgr from emp where sal>(select avg(sal) from emp)) t

join

dept d

on

d.deptno=t.deptno

join

salgrade s

on

t.sal between s.losal and s.hisal

left join

emp e

on

t.mgr=e.empno;

 

 

23、列出与"SCOTT"从事相同工作的所有员工及部门名称.

select t.ename,d.dname

from

(select ename,deptno from emp where job=(select job from emp where ename='SCOTT')and ename<>'SCOTT') t

join

dept d

on

t.deptno=d.deptno;

 

24、列出薪金等于部门30中员工的薪金的其他员工的姓名和薪金.

select ename,sal from emp where sal in(select distinct sal from emp where deptno=30) and deptno<>30;

 

25、列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金.部门名称.

 

 

26、列出在每个部门工作的员工数量,平均工资和平均服务期限.

 select

d.*,count(e.ename),ifnull(avg(sal),0),ifnull(avg(timestampdiff(YEAR,hiredate,now())),0)as avgyear

from

emp e

right join

dept d

on

 d.deptno=e.deptno

group by

d.deptno,d.dname,d.loc;

 

27、列出所有员工的姓名、部门名称和工资。

select t.ename,d.dname,t.sal

from

(select ename,deptno,sal from emp) t

join

dept d

on

d.deptno=t.deptno;

 

28、列出所有部门的详细信息和人数

select

d.deptno,d.dname,d.loc,t.count as '人数'

from

(select deptno,count(deptno) as count from emp group by deptno) t

right join

dept d

on

d. deptno=t.deptno;

 

29、列出各种工作的最低工资及从事此工作的雇员姓名

select

e.*

from

(select job,min(sal) as minsal from emp group by job) t

join

emp e

on

e.job=t.job and e.sal=t.minsal;

 

 

30、列出各个部门的MANAGER(领导)的最低薪金

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

 

31、列出所有员工的年工资,按年薪从低到高排序

select ename,sal*12 as income from emp order by income asc;

 

32、求出员工领导的薪水超过3000的员工名称与领导名称

select t.ename,e.ename

from

( select empno,ename,sal from emp where sal>3000 and empno in(select distinct mgr from emp where mgr is not null)) t

join

emp e

on

e.mgr=t.empno;

 

33、求出部门名称中,带'S'字符的部门员工的工资合计、部门人数.

select d.dname,t.countdeptno,t.sumsal

from

(select deptno,count(deptno) as countdeptno,sum(sal) as sumsal from emp group by deptno) t

join

(select deptno from emp where ename like'%S%' group by deptno) m

on

m.deptno=t.deptno

join

dept d

on

d.deptno=t.deptno;

 

 

34、给任职日期超过30年的员工加薪10%.

update emp_bak

set sal=sal*1.1

where

timestampdiff(YEAR,hiredate,now())>30;

转载地址:http://kdbmz.baihongyu.com/

你可能感兴趣的文章
mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
查看>>
mysql 数据库备份及ibdata1的瘦身
查看>>
MySQL 数据库备份种类以及常用备份工具汇总
查看>>
mysql 数据库存储引擎怎么选择?快来看看性能测试吧
查看>>
MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
查看>>
MySQL 数据库的高可用性分析
查看>>
MySQL 数据库设计总结
查看>>
Mysql 数据库重置ID排序
查看>>
Mysql 数据类型一日期
查看>>
MySQL 数据类型和属性
查看>>
mysql 敲错命令 想取消怎么办?
查看>>
Mysql 整形列的字节与存储范围
查看>>
mysql 断电数据损坏,无法启动
查看>>
MySQL 日期时间类型的选择
查看>>
Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
查看>>
MySQL 是如何加锁的?
查看>>
MySQL 是怎样运行的 - InnoDB数据页结构
查看>>
mysql 更新子表_mysql 在update中实现子查询的方式
查看>>
MySQL 有什么优点?
查看>>
mysql 权限整理记录
查看>>