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

你可能感兴趣的文章
poj 1321(回溯)
查看>>
Qt高级——Qt元对象系统源码解析
查看>>
qt调用vs2008编写的dll动态库(隐式调用)
查看>>
Qt读取注册表默认值
查看>>
poj 1679 判断MST是不是唯一的 (次小生成树)
查看>>
POJ 1703 Find them, Catch them
查看>>
POJ 1703 Find them, Catch them 并查集
查看>>
POJ 1738 An old Stone Game(石子合并)
查看>>
POJ 1740 A New Stone Game(博弈)题解
查看>>
Qt网络编程之实例二POST方式
查看>>
POJ 1765 November Rain
查看>>
poj 1860 Currency Exchange
查看>>
POJ 1961 Period
查看>>
POJ 2019 Cornfields (二维RMQ)
查看>>
poj 2057 The Lost House 贪心思想在动态规划上的应用
查看>>
poj 2057 树形DP,数学期望
查看>>
poj 2112 最优挤奶方案
查看>>
Qt编写自定义控件12-进度仪表盘
查看>>
SpringBoot主启动原理在SpringApplication类《第六课》
查看>>
poj 2186 Popular Cows :求能被有多少点是能被所有点到达的点 tarjan O(E)
查看>>