博客
关于我
数据库之经典面试
阅读量: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/

你可能感兴趣的文章
onCreate()方法中的参数Bundle savedInstanceState 的意义用法
查看>>
One good websit for c#
查看>>
OneASP 安全公开课,深圳站, Come Here, Feel Safe!
查看>>
OneBlog Shiro 反序列化漏洞复现
查看>>
oneM2M
查看>>
Oneplus5重装攻略
查看>>
one_day_one--mkdir
查看>>
ONI文件生成与读取
查看>>
Online PDF to PNG、JPEG、WEBP、 TXT - toolfk
查看>>
onlstm时间复杂度_CRF和LSTM 模型在序列标注上的优劣?
查看>>
onlyoffice新版5.1.2版解决中文汉字输入重复等问题
查看>>
onnx导出动态输入
查看>>
onnx导出动态输入
查看>>
onScrollStateChanged无效
查看>>
onTouchEvent构造器
查看>>
on_member_join 和删除不起作用.如何让它发挥作用?
查看>>
oobbs开发手记
查看>>
OOM怎么办,教你生成dump文件以及查看(IT枫斗者)
查看>>
OOP
查看>>
OOP之单例模式
查看>>