博客
关于我
数据库之经典面试
阅读量:528 次
发布时间:2019-03-08

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

数据库查询优化与实用场景

一、部门与员工数据处理

1. 获取各个部门最高薪水人员

通过连接查询可以轻松获取每个部门的最高薪水人员信息。以下查询范例可实现:

SELECT e.department, e.`name`, t.maxMoneyFROM (	SELECT e.department as dept, max(e.money) as maxMoney 	FROM employee e 	GROUP BY e.department) t JOIN employee e ON t.dept = e.departmentWHERE e.money = t.maxMoney;

2. 判断薪水超过部门平均值的人员

寻找薪水超出部门平均水平的员工,可以通过以下查询实现:

SELECT e.department, e.`name`, t.`平均薪水`, e.moneyFROM (	SELECT e.department as dept, avg(e.money) as 平均薪水	FROM employee e 	GROUP BY e.department) t JOIN employee e ON t.dept = e.departmentWHERE e.money > t.`平均薪水`;

3. 求解部门平均薪水等级

通过与薪酬等级表的连接查询,可以得出部门平均薪水对应的等级:

SELECT t.`部门`, t.`平均薪水`, m.gradeFROM (	SELECT e.department as 部门, avg(e.money) as 平均薪水	FROM employee e 	GROUP BY e.department) t JOIN moneygrade m ON t.`平均薪水` BETWEEN m.low and m.highWHERE m.grade = (SELECT min(m.grade) FROM ...);

二、学生数据处理

1. 无ICTURE prohibited.Spoiler: 没有选过郑老师的学生查询

通过关联查询获取未选过指定老师的学生姓名:

SELECT sname FROM s WHERE sno NOT IN (SELECT sno FROM sc WHERE cno = (SELECT cno FROM c WHERE cteacher = '郑老师'));

2. 列出多门及以上不及格的学生

根据成绩查询未及格学生名单,并统计不及格科目数量:

SELECT sc.sno, s.sname, COUNT(*) as studentSum FROM sc JOIN s ON sc.sno = s.sno WHERE sc.scgrade < 60 GROUP BY sc.snoHAVING studentSum >= 2;

3. 学习两门及以上课程的学生名单

通过查询学生选课表获取课程成绩:

SELECT s.sname FROM sc WHERE cno IN (SELECT cno FROM sc WHERE cno = 1	cno = 2); -- 重复添加的处理需要修正,示例简化

三、部门与员工信息管理

1. 列出员工及领导信息

结合内外连接查询,获取员工与领导的信息:

SELECT e.ename, b.ename AS leadernameFROM emp eLEFT JOIN emp b ON e.mgr = b.empno;

2.емаيل地址早于其上级的员工

通过日志时间查询满足条件的员工:

SELECT d.dname, e.empno, e.enameFROM emp eJOIN emp b ON e.mgr = b.empnoJOIN dept d ON e.deptno = d.deptnoWHERE e.hiredate < b.hiredate;

3.部门与员工的关联查询

查看部门及其部门员工的信息:

SELECT d.dname, e.*FROM emp eRIGHT JOIN dept d ON e.deptno = d.deptno;

4.部门员工数及部门信息

统计部门员工人数和部门信息:

SELECT d.deptno, d.dname, d.loc, COUNT(e.ename) as totalEmpFROM emp eRIGHT JOIN dept d ON e.deptno = d.deptnoGROUP BY d.deptno, d.dname, d.loc;

四、综合查询与数据分析

5.部门MANAGER的最低薪金

通过查询MANAGER职位的员工薪资:

SELECT w.deptno, MIN(w.sal) as minSalFROM emp wWHERE w.job = 'MANAGER'GROUP BY w.deptno;

6.领导工资超过3000的员工

根据条件查询高管信息:

SELECT e.ename, b.ename AS leadernameFROM emp eJOIN emp b ON e.mgr = b.empnoWHERE b.sal > 3000;

7.薪酬高于部门平均值的员工

获取薪酬高于部门平均的员工信息:

SELECT d.dname, e.ename, e.salFROM emp eJOIN dept d ON e.deptno = d.deptnoWHERE e.sal > (SELECT max(sal) as maxSal from dept);

8.部门员工统计及薪资分析

统计部门员工数量及薪资平

SELECT d.dname, COUNT(*) as '人数', AVG(e.sal) as '平均工资'FROM emp eJOIN dept d ON d.deptno = e.deptnoGROUP BY d.deptno;

9.所有员工信息汇总

列出所有员工姓名、部门及薪资:

SELECT e.ename as '员工姓名', d.dname as '部门名称', e.sal as '工资'FROM emp eJOIN dept d ON e.deptno = d.deptno;

10.部门详细信息统计

汇总部门信息及相关员工数据:

SELECT d.deptno, d.dname, d.loc, COUNT(e.ename) as totalEmpFROM emp eRIGHT JOIN dept d ON e.deptno = d.deptnoGROUP BY d.deptno, d.dname, d.loc;

11.不同部门的最低工资

统计不同岗位的最高薪资:

SELECT DISTINCT e.job, t.minSal, e.enameFROM emp eJOIN(SELECT e.job, MIN(e.sal) as minSalFROM emp eJOIN dept d group by e.job) tON e.sal = t.minSal;

通过以上查询,您可以高效处理各类数据分析任务,是数据库开发者和数据分析人员的实用参考。

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

你可能感兴趣的文章
python3 套接字异常(a byte-like object is required not str)
查看>>
python3 实现用户三次输入错误记录黑名单并对该用户登录锁定-day1
查看>>
python3 文本变图片
查看>>
Python3 查看 com 组件的属性
查看>>
python3 案例分享--发邮件
查看>>
python3 模板库_Python3 标准库概览_Python教程_我爱模板网 - 提供下载各种免费建站资源,免费网站模板,免费网页特效,让你爱上建站!...
查看>>
Python3 求最大/小值及索引值 Numpy
查看>>
python3+django使用celery执行某些任务失败的解决方案
查看>>
Python3+Requests+Unittest实战系列【一】
查看>>
python3+requests+unittest实战系列【一】
查看>>
python3+requests+unittest实战系列【二】
查看>>
Python3+Requests+Unittest实战系列【二】
查看>>
python3----ASCII
查看>>
Python3-selenium自动化测试框架,结合HTMLTestRunner测试报告!
查看>>
Python3-如何自我更新作为服务运行的应用程序
查看>>
Python3.1-网格模拟概念性问题
查看>>
Python3.12 解决conda环境libstdc++版本过低问题
查看>>
python3.2批量查询IP地址区域
查看>>
Python3.5中协程和未来/任务之间的区别?
查看>>
python3.5实现socket通讯(TCP)
查看>>