部门表、员工表、薪水等级表

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

第一步:取得每个部门最高薪水作为临时表t

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

第二步:临时表t与emp表连接条件 e.deptno=t.deptno and e.sal=t.maxSal

select e.ename,t.* from emp e join (select deptno,max(sal) as maxSal from emp group by deptno order by deptno) t on e.deptno=t.deptno and e.sal=t.maxSal

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

第一步:取得每个部门平均薪水作为临时表t 

SELECT DEPTNO, AVG(SAL) FROM emp GROUP BY DEPTNO;

第二步:临时表t与emp表连接条件 e.deptno=t.deptno and e.sal>t.avgSal

SELECT t.*,e.ENAME,e.SAL FROM emp e JOIN (SELECT DEPTNO, AVG(SAL) AS avgSal FROM emp GROUP BY DEPTNO) t ON e.DEPTNO=t.DEPTNO AND e.SAL>t.avgSal ORDER BY DEPTNO;

 3.取得部门中(所有人)平均的薪水等级

平均的薪水等级:先求出每个薪水对应的等级,然后找出薪水等级的平均值

平均薪水的等级:先求出每个部门的平均薪水,再根据平均薪水划分等级

SELECT e.ENAME,e.DEPTNO,e.SAL,s.GRADE FROM emp e JOIN salgrade s ON e.SAL BETWEEN s.LOSAL AND s.HISAL ORDER BY DEPTNO;
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,SAL FROM emp ORDER BY SAL DESC LIMIT 0,1;

第二种方案:表的自连接 

SELECT SAL FROM emp WHERE SAL NOT IN(SELECT DISTINCT a.SAL FROM emp a JOIN emp b ON a.SAL<b.SAL);

5.取得平均薪水最高的部门的部门编号(两种做法)

第一种方案:降序取第一个

第一步:找出每个部门的平均薪水

SELECT DEPTNO,AVG(SAL) AS avgSAL FROM emp GROUP BY DEPTNO;

第二步:降序找出第一个

SELECT DEPTNO FROM emp GROUP BY DEPTNO ORDER BY AVG(SAL) DESC LIMIT 1;

第二种方案: max函数

第一步同上

第二步:max函数找到最高平均薪水

SELECT MAX(t.avgSAL) FROM (SELECT AVG(SAL) AS avgSAL FROM emp GROUP BY DEPTNO) t

第三步:查询完部门编号和平均薪水然后根据条件等于最大平均薪水显示

SELECT DEPTNO,AVG(SAL) AS avgsal FROM emp GROUP BY DEPTNO HAVING avgsal=(SELECT MAX(t.avgSAL) FROM (SELECT AVG(SAL) AS avgSAL FROM emp GROUP BY DEPTNO) t);

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

第一步: 找出平均薪水最高的部门

SELECT DEPTNO,AVG(SAL) AS avgsal FROM emp GROUP BY DEPTNO ORDER BY avgsal DESC LIMIT 1;

第二步:与部门表连接条件部门编号

SELECT d.DNAME,AVG(e.SAL) AS avgsal FROM emp e JOIN dept d ON e.DEPTNO=d.DEPTNO GROUP BY d.DNAME ORDER BY avgsal DESC LIMIT 1;

7.求平均薪水的等级最低的部门的部门名称(注意这里不能使用limit,存在局限性如果等级最低出现多个部门)

第一步:求各个部门平均薪水

SELECT e.DEPTNO,AVG(e.SAL) AS avgsal FROM emp e GROUP BY DEPTNO ORDER BY avgsal ASC;

第二步:结果与部门表连接条件,查询等级结果

SELECT t.*,s.GRADE FROM (SELECT d.DNAME,AVG(e.SAL) AS avgsal FROM emp e JOIN dept d ON e.DEPTNO=d.DEPTNO GROUP BY d.DNAME ORDER BY avgsal ASC) t
JOIN salgrade s ON t.avgsal BETWEEN s.LOSAL AND s.HISAL;

第三步:查询平均薪水最低对应的等级

SELECT GRADE FROM salgrade WHERE (SELECT AVG(e.SAL) AS avgsal FROM emp e GROUP BY DEPTNO ORDER BY avgsal ASC LIMIT 1) BETWEEN LOSAL AND HISAL; //3

第四步:第二步与第三步连接条件显示结果

SELECT t.*,s.GRADE FROM (SELECT d.DNAME,AVG(e.SAL) AS avgsal FROM emp e JOIN dept d ON e.DEPTNO=d.DEPTNO GROUP BY d.DNAME ORDER BY avgsal ASC) t
JOIN salgrade s ON t.avgsal BETWEEN s.LOSAL AND s.HISAL WHERE s.GRADE=(SELECT GRADE FROM salgrade WHERE (SELECT AVG(e.SAL) AS avgsal FROM emp e GROUP BY DEPTNO ORDER BY avgsal ASC LIMIT 1) BETWEEN LOSAL AND HISAL);

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

第一步:找出普通员工的最高薪水

SELECT MAX(SAL) FROM emp WHERE EMPNO NOT IN (SELECT DISTINCT MGR FROM emp WHERE MGR IS NOT NULL);

第二步:查询工资比最高薪水高的领导人姓名

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.取出薪水最高的前5名员工(这里不需要考虑第6名与第5名工资一样的情况)

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.取得最后入职的5名员工 

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;

第二步:根据其等级进行分组并计数

SELECT s.GRADE,COUNT(*) FROM emp e JOIN salgrade s ON e.SAL BETWEEN s.LOSAL AND s.HISAL GROUP BY s.GRADE;

13.列出所有员工及其领导的名字

SELECT a.ENAME '员工',b.ENAME '领导' FROM emp a LEFT JOIN emp b ON a.MGR=b.EMPNO;

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

SELECT a.EMPNO '员工号',a.ENAME '员工',a.HIREDATE,b.ENAME '领导',b.HIREDATE,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;

15.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门(右外连接)

SELECT e.*,d.DNAME FROM emp e RIGHT JOIN dept d ON e.DEPTNO=d.DEPTNO;

16.列出至少有5个员工的所有部门

SELECT e.DEPTNO,d.DNAME FROM emp e JOIN dept d ON e.DEPTNO=d.DEPTNO GROUP BY DEPTNO HAVING COUNT(*)>=5;

17.列出薪资比“Smith”高的所有员工信息

SELECT ENAME,SAL FROM emp WHERE SAL >(SELECT SAL FROM emp WHERE ENAME='SMITH');

18.列出所有(“CLERK”)办事员的姓名及其部门名称,部门的人数 

第一步:列出所有(“CLERK”)办事员的姓名及其部门名称 临时表t1

SELECT e.ENAME,e.JOB,d.DNAME,d.DEPTNO FROM emp e JOIN dept d ON e.DEPTNO=d.DEPTNO WHERE e.JOB='CLERK';

第二步:列出部门的人数 临时表t2

SELECT DEPTNO,COUNT(*) FROM emp GROUP BY DEPTNO;

第三步:两张临时表连接

SELECT t1.*,t2.deptCount FROM (SELECT e.ENAME,e.JOB,d.DNAME,d.DEPTNO FROM emp e JOIN dept d ON e.DEPTNO=d.DEPTNO WHERE e.JOB='CLERK') t1 JOIN (SELECT DEPTNO,COUNT(*) AS deptCount FROM emp GROUP BY DEPTNO) t2 ON t1.DEPTNO=t2.DEPTNO;

mysql笔试题18道相关推荐

  1. mysql笔试题15道

    (93条消息) mysql笔试题18道_bubbleJessica的博客-CSDN博客 19.列出最低薪资大于1500的各种工作及从事此工作的全部雇员人数 SELECT JOB,COUNT(*) FR ...

  2. c语言while中100 95,C语言笔试题100道

    C语言笔试题100道 a) 30 b) 50 c) 40 d) 20 e) 10 18) #include void main() { int a=3,b=2,c=1; int x=10,y=20; ...

  3. php如何对 mysql 中text类型拆分存入一个数组_PHP、Mysql笔试题

    PHP&MySQL 笔试题 一.选择题 1. php代表什么意思?() A.Hypertext Preprocessor(超文本预处理器) B.Hyperlink Preprocessor(超 ...

  4. MySQL笔试题练习及答案(一)

    第一题 题目描述 查找最晚入职员工的所有信息,为了减轻入门难度,目前所有的数据里员工入职的日期都不是同一天(sqlite里面的注释为–,mysql为comment) CREATE TABLE empl ...

  5. mysql+小写字母不对_PHP、Mysql笔试题

    PHP&MySQL 笔试题 一.选择题 1. php代表什么意思?() A.Hypertext Preprocessor(超文本预处理器) B.Hyperlink Preprocessor(超 ...

  6. Mysql笔试题之单列拆分多列查询并合并显示

    Mysql笔试题之单列拆分多列查询并合并显示 事情是这样的:某天在开发群里看同行们在聊天,有一位同行发了一个mysql笔试题.抱着试一试的心态研究了几个小时.话不多说直接上题. 题目 有学生表,结构和 ...

  7. php mysql笔试题_初级PHP程序员笔试题

    初级PHP程序员笔试题 答题时间:60 – 90分钟 一.基础及程序题(建议使用你擅长的语言:C/C++.PHP.Java) 1.写一个排序算法,可以是冒泡排序或者是快速排序,假设待排序对象是一个维数 ...

  8. mysql 笔试题_MySQL笔试题详解(一)(中等难度)

    有一位学生在找数据分析工作的时候,遇到一个笔试题,内容如下: 现有注册用户表table_user,有两个字段:user_id(用户id).reg_tm(注册时间).有订单表table_order,有三 ...

  9. MySQL笔试题整理(二)

    一.学生表.班级表 1.学生表:学生编号ID.班级编号c_ID.姓名sname.性别sex.分数score 2.班级表:班级编号cID.班级cname --建表 create table Studen ...

最新文章

  1. PyTorch 自动微分示例
  2. Android中RecyclerView嵌套RecyclerView或嵌套ListView
  3. FPGA的设计艺术(14)使用函数和任务提升逻辑的可重用性
  4. 云计算调查显示 希望与问题同在
  5. spark.kubernetes.file.upload.path的作用
  6. sublime代码片段
  7. eclipse没有advanced按钮_Eclipse快捷键 + 自动提示不显示问题
  8. UWP ListView 绑定 单击 选中项 颜色
  9. Hive之 hive的三种使用方式(CLI、HWI、Thrift)
  10. mysql 全文搜索怎么设置_mysql 全文搜索 技巧
  11. Pro Git读书笔记 - 分支
  12. 『号外号外』WoS数据库更新后导入VOSviewer出错的原因
  13. ie11安装程序无法继续 因为你的计算机,win7安装不了ie11怎么回事 win7安装不了ie11的解决方案...
  14. Sublime 复制当前行快捷键及删除当前行快捷键、跳到最后一行、选中一行快捷键
  15. [CTF]-NepCTF2022
  16. matlab平行线的中线,cad怎么画两条平行线的中线
  17. 解决IE6、IE7、IE8、Firefox兼容的几种方案
  18. 2021年的Gartner云基础设施和平台服务魔力象限有什么不一样?
  19. excel文件导出、下载的响应类型设置
  20. mapper报Cannot find class: com/kuang/dao/UserMapper

热门文章

  1. Java基础入门必须了解的英语词汇
  2. 网络策划是做什么的,网络策划营销公司教你做策划
  3. 从0开始学习 GitHub 系列之「05.Git 进阶」----转载自stormzhang 原创文章
  4. 淘宝新店没有流量怎么回事
  5. 数据显示强生新冠疫苗对德尔塔变异病毒有效;康方生物派安普利提交第三个上市申请 | 医药健闻...
  6. css3渐变—渐变_玩渐变
  7. 打印时中间空白,两边清楚
  8. Delphi 官方下载 地址
  9. matlab按点绘制网格
  10. 概念图创作-IHMC CmapTools