大家可以自行网上找资源(网上资源比较多,不建议下载我的),也可以在我这里下载:

1.取得每个部门最高薪水的人员名称:正确   一共有4个单位,要进行左外连接 其中一个单位没得员工

SELECT dept.dname, emp.ename, emp.sal
FROM emp
RIGHT JOIN dept ON emp.deptno = dept.deptno
RIGHT JOIN (SELECT dept.dname, MAX(emp.sal) AS 'max_sal'FROM empRIGHT JOIN dept ON emp.deptno = dept.deptnoGROUP BY dept.dname
)AS tt
ON tt.dname = dept.dname AND tt.max_sal = emp.sal
GROUP BY dname;

2.哪些人的薪水在部门平均薪水之上:不确定

SELECT dept.dname, emp.ename, emp.sal
FROM emp
INNER JOIN dept ON emp.deptno = dept.deptno
INNER JOIN (SELECT dept.dname, AVG(emp.sal) AS 'avg_sal'FROM empINNER JOIN dept ON emp.deptno = dept.deptnoGROUP BY dname
)AS tt
ON tt.dname = dept.dname AND tt.avg_sal <= emp.sal;

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

SELECT tt.dname, salgrade.grade
FROM
(SELECT dept.dname, AVG(emp.sal) AS 'avg_sal'FROM empRIGHT JOIN dept ON emp.deptno = dept.deptnoGROUP BY dname
) AS tt,
salgrade
WHERE tt.avg_sal >= salgrade.losal AND tt.avg_sal <= hisal;

4.不准使用组函数(MAX),取得最高薪水

SELECT emp.ename, emp.sal
FROM emp
ORDER BY sal DESC -- 由高到底, asc 由低到高
LIMIT 0, 1;

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

SELECT deptno
FROM
(SELECT dept.deptno, AVG(emp.sal) AS 'avg_sal'FROM empINNER JOIN dept ON emp.deptno = dept.deptnoGROUP BY dnameORDER BY avg_sal DESCLIMIT 0, 1
)AS tt;

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

SELECT dname
FROM
(SELECT dept.dname, AVG(emp.sal) AS 'avg_sal'FROM empINNER JOIN dept ON emp.deptno = dept.deptnoGROUP BY dnameORDER BY avg_sal DESCLIMIT 0, 1
)AS tt;

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

SELECT dname
FROM
(SELECT t1.dname , SALGRADE.`GRADE` FROM (SELECT dept.dname, AVG(emp.sal) AS 'avg_sal'FROM empINNER JOIN dept ON emp.deptno = dept.deptnoGROUP BY dname) AS t1 , SALGRADEWHERE t1.avg_sal >= SALGRADE.`LOSAL` AND t1.avg_sal <= SALGRADE.`HISAL`
)AS tt
WHERE tt.grade =
(SELECT MIN(SALGRADE.`GRADE`) FROM (SELECT dept.dname, AVG(emp.sal) AS 'avg_sal'FROM empINNER JOIN dept ON emp.deptno = dept.deptnoGROUP BY dname) AS t1   , SALGRADEWHERE t1.avg_sal >= SALGRADE.`LOSAL` AND t1.avg_sal <= SALGRADE.`HISAL`
);

8.取得比普通员工(员工代码没有在mgr上出现的)的最高薪水

SELECT emp.ename
FROM emp
WHERE emp.mgr IS NULL
AND sal >
(SELECT MAX(sal) FROM emp WHERE mgr IS NOT NULL
);

9.取得薪水最高的5名员工

SELECT emp.`EMPNO` AS '编号', emp.`ENAME` AS '姓名'-- , emp.`SAL` as '薪资'
FROM emp
ORDER BY emp.`SAL` DESC
LIMIT 0, 5;

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

SELECT emp.`EMPNO` AS '编号', emp.`ENAME` AS '姓名'-- , emp.`SAL`
FROM emp
ORDER BY emp.`SAL` DESC
LIMIT 5, 5;

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

SELECT tt.no AS '编号', tt.name AS '姓名'-- , tt.days
FROM
(SELECT emp.`EMPNO` AS 'no', emp.`ENAME` AS 'name', TO_DAYS(HIREDATE) AS 'days'FROM emp
) AS tt
ORDER BY days DESC
LIMIT 0, 5;

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

SELECT salgrade.`GRADE` AS '薪资等级', COUNT(tt.`EMPNO`) AS '员工数'
FROM salgrade,
(SELECT emp.`EMPNO`, emp.`SAL` FROM emp
) AS tt
WHERE tt.`SAL` >= salgrade.`LOSAL` AND tt.`SAL` <= salgrade.`HISAL`
GROUP BY salgrade.`GRADE`;

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

SELECT emp.`ENAME` AS '员工名称', tt.lname AS '领导名称'
FROM
emp LEFT JOIN
(SELECT emp.`EMPNO`, emp.`ENAME` AS 'lname'FROM emp WHERE empno IN (SELECT mgr FROM emp) -- 找出所有是领导的员工no) AS tt
ON emp.`MGR` = tt.empno;

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

SELECT t2.eno AS '编号', t2.ename AS '姓名', dept.`DNAME` AS '部门名称', t2.ehiredate AS '员工受雇日期', t2.lhiredate AS '领导受雇日期'
FROM dept
INNER JOIN
(SELECT emp.`EMPNO` AS 'eno', emp.`ENAME`, emp.`HIREDATE` AS 'ehiredate', t1.lhiredate, emp.`DEPTNO`FROM emp LEFT JOIN (SELECT emp.`EMPNO` AS 'lno', emp.`HIREDATE` AS 'lhiredate'FROM emp WHERE empno IN (SELECT mgr FROM emp) -- 找出所有是领导的员工no) AS t1ON emp.`MGR` = t1.lno
) AS t2
ON t2.deptno = dept.`DEPTNO`
WHERE t2.ehiredate <  t2.lhiredate OR t2.lhiredate IS NULL;

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

SELECT dept.`DNAME` AS '部门名称', emp.`ENAME` AS '员工名称', emp.`JOB` AS '职位', emp.`HIREDATE` AS '入职时间', emp.`SAL` AS '薪水'
FROM dept LEFT JOIN emp ON dept.`DEPTNO` = emp.`DEPTNO`

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

SELECT dept.`DNAME` AS '部门名', COUNT(emp.`EMPNO`) AS '员工个数'
FROM dept LEFT JOIN emp ON dept.`DEPTNO` = emp.`DEPTNO`
GROUP BY dept.`DNAME` HAVING COUNT(emp.`EMPNO`) >= 5;

17.列出薪水比“SMITH”多的所有员工信息

SELECT *
FROM emp
WHERE emp.`SAL` >
(SELECT emp.`SAL`FROM empWHERE emp.`ENAME` = 'SMITH'
);

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

SELECT emp.`ENAME` AS '姓名', dept.`DNAME` AS '部门名称', tt.emp_count AS '部门人数'
FROM emp LEFT JOIN dept ON emp.`DEPTNO` = dept.`DEPTNO`
INNER JOIN
(SELECT dept.`DEPTNO`, COUNT(emp.`EMPNO`) AS 'emp_count'FROM dept LEFT JOIN emp ON dept.`DEPTNO` = emp.`DEPTNO`GROUP BY dept.`DEPTNO` ) AS tt
ON emp.`DEPTNO` = tt.deptnoWHERE emp.`JOB` = 'CLERK';

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

SELECT emp.`JOB` AS '工作名称', COUNT(emp.`EMPNO`) AS '雇员人数'
FROM emp
WHERE emp.`JOB` IN (SELECT emp.`JOB`FROM empGROUP BY emp.`JOB` HAVING MIN(emp.`SAL`) >1500
)
GROUP BY emp.`JOB`;

-- 20.列出在部门“SALES”<销售部>工作的员工姓名(假定不知道销售部门的部门编号)

SELECT emp.`ENAME` AS '销售部人员'
FROM emp
WHERE emp.`DEPTNO` = (SELECT dept.`DEPTNO`FROM deptWHERE dept.`DNAME` = 'sales'
);

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

SELECT t1.ename AS '员工名称', dept.`DNAME` AS '部门名称', t2.ename AS '上级名称', t1.grade AS '工资等级', t1.sal AS '工资'FROM
(SELECT emp.`EMPNO`, emp.`DEPTNO`, emp.`ENAME`, emp.`SAL`, emp.`MGR`,salgrade.`GRADE`FROM emp, salgradeWHERE emp.`SAL` > (SELECT AVG(sal) AS 'avg_sal'FROM emp) AND emp.`SAL` >= salgrade.`LOSAL` AND emp.`SAL` <= salgrade.`HISAL`
) AS t1
LEFT JOIN
(SELECT emp.`EMPNO` AS 'mgr', emp.`ENAME` -- 注意这里是查出所有领导的empno,作为mgr编号FROM emp WHERE emp.`EMPNO` IN (SELECT DISTINCT(emp.`MGR`) -- 必须要distinct 不然查出来的mgr有重复,后面上层再查重复值接近笛卡尔积FROM empWHERE mgr IS NOT NULL)
) AS t2
ON t1.mgr = t2.mgr
LEFT JOIN dept ON t1.deptno = dept.`DEPTNO`;

22.列出“SCOTT”从事相同工作的所有员工及部门名称

SELECT emp.`EMPNO` AS '员工编号', emp.`ENAME` AS '员工名称', dept.`DNAME` AS '部门名称'-- , emp.`DEPTNO`
FROM emp, dept
WHERE emp.`JOB` = (SELECT emp.`JOB` -- 查询出SCOTT从事的职业FROM empWHERE emp.`ENAME` = 'SCOTT'
) AND emp.`ENAME` <> 'SCOTT'
AND emp.`DEPTNO` = dept.`DEPTNO`;

23.列出薪水等于部门30中员工的薪水的其它员工的姓名和薪水

SELECT emp.`EMPNO` AS '员工编号', emp.`ENAME` AS '员工名称', emp.`SAL` AS '员工薪水'
FROM emp
WHERE emp.`DEPTNO` <> 30
AND emp.`SAL` IN(SELECT DISTINCT emp.`SAL` -- 查询出部门为30的所有的员工的sal 不重复FROM empWHERE emp.`DEPTNO` = 30
);

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

SELECT emp.`EMPNO` AS '员工编号', emp.`ENAME` AS '员工名称', emp.`SAL` AS '员工薪水', dept.`DNAME` AS '部门名称'
FROM emp, dept
WHERE emp.`DEPTNO` <> 30
AND emp.`SAL` >(SELECT MAX(emp.`SAL`) -- 查询出部门为30的所有的员工的sal 不重复FROM empWHERE emp.`DEPTNO` = 30
)
AND dept.`DEPTNO` = emp.`DEPTNO`;

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

SELECT dept.`DNAME` AS '部门名称', COUNT(emp.`EMPNO`) AS '员工数量', ROUND(AVG(emp.`SAL`), 2) AS '平均工资', t2.avg_year AS '平均服务年限'
FROM dept LEFT JOIN emp ON dept.`DEPTNO` = emp.`DEPTNO`
LEFT JOIN
(SELECT t1.deptno, ROUND(AVG(t1.year), 0) AS 'avg_year' -- 四舍五入,保留0位小数FROM (SELECT emp.`DEPTNO`, ROUND((TO_DAYS(NOW())-TO_DAYS(emp.`HIREDATE`))/366, 0) AS 'year'FROM emp) AS t1GROUP BY t1.deptno
) AS t2
ON dept.`DEPTNO` = t2.deptno
GROUP BY dept.`DEPTNO`;

26. 列出所有员工的姓名、部门名称和工资

SELECT emp.`ENAME` AS '员工名称', dept.`DNAME` AS '部门名称', emp.`SAL` AS '工资'
FROM emp, dept
WHERE dept.`DEPTNO` = emp.`DEPTNO`;

27. 列出所有部门的详细信息和人数

SELECT dept.`DEPTNO` AS '部门编号', dept.`DNAME` AS '部门名称', dept.`LOC` AS '部门地址', tt.num AS '部门人数'
FROM dept LEFT JOIN
(SELECT emp.`DEPTNO`, COUNT(emp.`EMPNO`) AS 'num'FROM empGROUP BY emp.`DEPTNO`
) AS tt
ON dept.`DEPTNO` = tt.`DEPTNO`;

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

SELECT emp.`SAL`, emp.`ENAME`
FROM emp,
(SELECT emp.`JOB`, MIN(emp.`SAL`) AS 'min_sal'FROM empGROUP BY emp.`JOB`
)AS tt
WHERE emp.`JOB` = tt.job AND emp.`SAL` = tt.min_sal;

29. 列出各个部门 MANAGER 的最低薪金

SELECT dept.`DNAME` AS '部门名称', MIN(tt.sal) AS '最低薪资'
FROM dept LEFT JOIN
(SELECT emp.`DEPTNO`, emp.`SAL`FROM empWHERE emp.`JOB` = 'manager'
) AS tt
ON dept.`DEPTNO` = tt.deptno
GROUP BY dept.`DEPTNO`;

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

SELECT emp.`EMPNO` AS '员工编号', emp.`ENAME` AS '员工名称', (emp.`SAL`*12) AS '年薪'
FROM emp
ORDER BY 年薪 ASC;

31. 求出员工领导的薪水超过 3000 的员工名称和领导名称

SELECT tt.ename AS '领导名称', emp.`ENAME` AS '雇员名称'
FROM emp RIGHT JOIN
(SELECT emp.`EMPNO`, emp.`ENAME`FROM empWHERE emp.`EMPNO` IN(SELECT DISTINCT emp.`MGR`FROM empWHERE emp.`MGR` IS NOT NULL) AND emp.`SAL` >= 3000
) AS tt
ON emp.`MGR` = tt.empno

32. 求部门名称中带“S”字符的部门员工的工资合计、部门人数

SELECT tt.dname AS '部门名称', SUM(emp.`SAL`) AS '工资合计', COUNT(emp.`EMPNO`) AS '部门人数'
FROM emp RIGHT JOIN
(SELECT dept.`DEPTNO`, dept.`DNAME`FROM deptWHERE dept.`DNAME` LIKE '%s%'
) AS tt
ON emp.`DEPTNO` = tt.deptno
GROUP BY emp.`DEPTNO`;

32+.查询名字中有s的员工的工资总和(按照部门进行分组)

SELECT dept.`DNAME` AS '部门名称', SUM(tt.`SAL`) AS '工资'
FROM dept LEFT JOIN
(SELECT emp.`EMPNO`, emp.`ENAME`, emp.`SAL`, emp.`DEPTNO`FROM empWHERE emp.`ENAME` LIKE '%s%'
) AS tt
ON dept.`DEPTNO` = tt.deptno
GROUP BY dept.`DEPTNO`;

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

UPDATE emp SET emp.`SAL` = emp.`SAL` + emp.`SAL`*10
WHERE emp.`EMPNO` IN( SELECT tt.`EMPNO` FROM (SELECT emp.`EMPNO`, ROUND((TO_DAYS(NOW())-TO_DAYS(emp.`HIREDATE`))/366, 0) AS 'work_year'FROM emp) AS ttWHERE tt.work_year > 30
);

转载于:https://www.cnblogs.com/mzywucai/p/11053503.html

关于oracle样例数据库emp、dept、salgrade的mysql脚本复杂查询分析相关推荐

  1. 创建和准备Oracle样例数据库

    一 创建Oracle样例数据库 此处有一个Oracle创建数据库和表和插入数据的脚本: http://www.forta.com/books/0672336073/ 亦可在此下载: http://pa ...

  2. oracle样例数据库,创建和准备Oracle样例数据库

    一 创建Oracle样例数据库 此处有一个Oracle创建数据库和表和插入数据的脚本: http://www.forta.com/books/0672336073/ 亦可在此下载: http://pa ...

  3. oracle建库并使用HR范例,Oracle HR样例数据库建立

    在视频的学习过程中,老师用到了HR样例数据库,但是我发现我的样例数据库中没有HR样例数据库,可能是在安装的时候漏掉了哪个环节,所以只能补救一下 如何判断自己是否有HR样例数据库呢?操作代码如下所示 第 ...

  4. sakila mysql样例数据库解析_Sakila MySQL 样例数据库解析

    0.前言 Sakila 可以作为数据库设计的参考,也可作为实验数据.本例是用作数据分析学习的实验数据. The Sakila sample database was developed by Mike ...

  5. ORACLE数据库 基础练习表EMP\DEPT \SALGRADE脚本

    --如果数据库本身已经有同名的表,不能重复创建的 DROP TABLE EMP; DROP TABLE DEPT; DROP TABLE SALGRADE;--创建员工信息表 CREATE TABLE ...

  6. MySQL 8.0导入样例数据库employees

    1.下载 https://launchpad.net/test-db/employees-db-1/1.0.6 2.导入 [root@node1 app]# cd employees_db/ [roo ...

  7. java 内存泄漏样例_一次线上Java应用内存泄漏分析实例

    由于JVM的内存管理采用GC垃圾自动回收机制,这使得Java程序员在编程的时候确实可以从内存管理中释放出来,但这也引发了另外一个大问题,一旦Java应用出现内存泄漏的时候,常常让人措手不及,陷入无从下 ...

  8. 软件推广样例:爱情银行APP日流超50w原因分析

    今天,爱情银行APP登顶appstore榜首,且日下载量超50w,笔者认真分析,主要原因有以下几点: 一是设定长期目标,围绕奖励来拉新人.设定365天,情侣签到,可以得到1000元现金红包,并且平常有 ...

  9. Oracle针对SCOTT下EMP表的练习题

    1.查询所有的部门编号:  select DEPTNO from DEPT ; 2.查询所有有人的部门编号:  select DEPTNO from EMP ; 3.查询所有岗位名称:  select ...

  10. AWStats简介:Apache/Windows IIS的日志分析工具的下载,安装,配置样例和使用

    http://www.chedong.com/tech/awstats.html 你完全不必耐心看完所有内容:简要安装说明如下 安装 http://sourceforge.net/projects/a ...

最新文章

  1. 新报告直指3大安全威胁 企业需小心应对
  2. 【ML】 李宏毅机器学习一:Regression、Gradient Descent(python实现)
  3. Cloud Connect: 使用现有的云基础设施来降低使用云编码的操作成本
  4. 前端学习(2349):tabber的其他属性
  5. C++中依赖受限名称定义编译无法通过的问题
  6. 小沙的长路(图论+数学)
  7. 在Windows下启动java服务
  8. matlab直接终止程序,怎么终止matlab程序
  9. java jdk生成安卓app证书
  10. python xlsxwriter下载_python_xlsxwriter模块
  11. 全国省份及其对应的城市字典
  12. 青果教务管理系统存储型XSS 一枚
  13. 世界豪车 TOP 10
  14. java的if 、if else、while、do while、switch、for执行语句
  15. FPGA的学习:基于ROM的VGA图像显示(弹跳特效)
  16. 【示例源码】还在为毒奶粉忧桑?轻松一下,玩玩猩球保卫战吧(html5游戏)
  17. 【图解】连狗子都能看懂的Python基础总结(二)什么是库、包、模块?
  18. 全球及中国可编程图形计算器行业研究及十四五规划分析报告
  19. 跳入餐饮新消费水池,腾讯、字节、B站能否“如鱼得水”?
  20. linux内存与扇区,磁盘的基础知识——扇区、柱面、磁道、族

热门文章

  1. 二叉树:以为使用了递归,其实还隐藏着回溯
  2. 如何在 M1 Mac 上运行英特尔应用程序?
  3. Linguist for Mac(语言翻译工具)
  4. JixiPix Rip Studio入门教程:如何修改图层和背景样式?
  5. Web开发笔记(一)
  6. elasticsearch 1.1.0 mmseg 英文数字分词
  7. xtrabackup与mysqldump对比测试
  8. 《Http Client 官方文档》7. 高级主题
  9. linux下安装Telnet服务器
  10. SQL Server 2012 扩展事件(2)体系结构