MySQL基础_练习题
1.取得每个部门最高薪水的人员名称①找出每个部门的最高薪水按照部门进行分组求最大值select deptno,max(sal) from emp group by deptno;令上面这个表叫临时表t②与员工表进行表连接select t.*,e.ename from t join emp e on t.deptno e.deptno and t.max(sal) e.sal;③把两个SQL语句相结合select t.*,e.ename from (select deptno,max(sal) as maxsal from emp group by deptno) t join emp e on t.deptno e.deptno and t.maxsal e.sal;2.哪些人的薪水在部门的平均薪水之上①查看部门的平均薪水(根据部门编号分组)select deptno,avg(sal) as avgsal from emp group by deptno;令上表为临时表t②进行表连接select t.*,e.ename,e.sal from (select deptno,avg(sal) as avgsal from emp group by deptno) t join emp e on e.deptno t.deptno and e.sal t.avgsal;3.取得每个部门平均薪水的等级①查看每个部门的平均薪水select deptno,avg(sal) as avgsal from emp group by deptno;令上表为临时表t②进行表连接select t.*,s.grade from (select deptno,avg(sal) as avgsal from emp group by deptno) t join salgrade s on t.avgsal between losal and hisal;4.取得部门中所有人的平均的薪水等级薪水等级的平均值①查看部门中所有人的薪水等级select e.deptno,s.grade,e.ename,e.sal from emp e join salgrade s on e.sal between s.losal and s.hisal;②按照部门分组求薪水等级的平均值select e.deptno,avg(s.grade) as avggrade from emp e join salgrade s on e.sal between s.losal and s.hisal group by e.deptno;5.不准用组函数Max取得最高薪水给出两种解决方案第一种降序排序取第一个limitselect sal from emp order by sal desc limit 1;第二种maxselect max(sal) from emp;第三种自链接select sal from emp;令上表为a表再复制一份一模一样的为b表条件a.salb.sal那a表的5000肯定就找不到比b表小的查询结果肯定就查不到5000;distinct是去重select distinct a.sal from emp a join emp b on a.sal b.sal;select sal from emp where sal not in(select distinct a.sal from emp a join emp b on a.sal b.sal);6.取得平均薪水最高的部门的部门编号至少给出两种解决方案第一种根据降序取第一个select deptno,avg(sal) as avgsal from emp group by deptno order by avgsal desc limit 1;第二种max函数①找出最高的平均薪水select max(avgsal) from (select avg(sal) as avgsal from emp group by deptno) tselect deptno,avg(sal) as avgsal from emp group by deptno having avgsal (select max(avgsal) from (select avg(sal) as avgsal from emp group by deptno) t);7.取得平均薪水最高的部门的部门名称多一个表连接和dept表连接按照部门名称进行分组.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;8.求平均薪水的等级最低的部门的部门名称①找到最低的平均薪资select avg(sal) as avgsal from emp group by deptno order by avgsal asc limit 1;②找到最低薪资的等级select s.grade from salgrade s join (select avg(sal) as avgsal from emp group by deptno order by avgsal asc limit 1) t on t.avgsal between s.losal and s.hisal;③找出每个部门的平均薪水按照部门名称分组求每一组的平均薪水而且还需要关联等级select d.dname,avg(sal) as avgsal from emp e join dept d on e.deptno d.deptno group by d.dname;④第三步是临时表t与salgrade s连接(找出每个部门的平均等级)select t.*,s.grade from (select d.dname,avg(sal) as avgsal from emp e join dept d on e.deptno d.deptno group by d.dname)t join salgrade s on t.avgsal between s.losal and s.hisal;⑤最后一步我们再第二步找到最低等级为3级现在把条件加上select t.*,s.grade from (select d.dname,avg(sal) as avgsal from emp e join dept d on e.deptno d.deptno group by d.dname)t join salgrade s on t.avgsal between s.losal and s.hisal where s.grade (select s.grade from salgrade s join (select avg(sal) as avgsal from emp group by deptno order by avgsal asc limit 1) t on t.avgsal between s.losal and s.hisal);9.取得比普通员工(员工代码没有在mgr字段上出现的)的最高薪水还要高的领导人姓名①首先比普通员工薪水高的一定是领导人然后我们第一步查询所有领导的编号注意里面有一个nullselect distinct mgr from emp where mgr is not null②找出普通员工的最高薪水select max(sal) from emp where empno not in(select distinct mgr from emp where mgr is not null);③找出薪资比第二步大的select ename from emp where sal(select max(sal) from emp where empno not in(select distinct mgr from emp where mgr is not null));10.取得薪水最高的前五名员工select ename,sal from emp order by sal desc limit 5;11.取得薪水最高的第六到第十名员工select ename,sal from emp order by sal desc limit 5,5;12.取得最后入职的5名员工select ename,sal,hiredate from emp order by hiredate desc limit 5;13.取得每个薪水等级有多少员工①查询每个员工的薪水等级emp e和slagrade s 连接select e.ename,e.sal,s.grade from emp e join salgrade s on e.sal between s.losal and s,hisal;② 基于以上的查询结果继续按照grade分组计数select s.grade, count(*) from emp e join salgrade s on e.sal between s.losal and s.hisal group by s.grade;14.列出所有员工及领导的姓名表的自连接外连接select e.ename as 员工,l.ename as 领导 from emp e left join emp l on e.mgr l.empno;里面的有一个是null我们改成没有领导用ifnull函数select e.ename as 员工,ifnull(l.ename,老板) 领导 from emp e left join emp l on e.mgr l.empno;15.列出受雇日期早于其直接上级的所有员工的编号,姓名,部门名称①先列出员工编号、姓名、部门名称select e.empno,e.ename,d.dname from emp e join dept d on e.deptno d.deptno;再连接领导这张表select e.empno,e.ename,d.dname from emp e join dept d on e.deptno d.deptno join emp l on e.mgr l.empno where e.hiredate l.hiredate;16.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门select e.*,d.dname from emp e right join dept d on e.deptno d.deptno;17.列出至少有5个员工的所有部门select deptno from emp group by deptno having count(*) 5;18.列出薪金比SMITH多的所有员工信息①找出Smith的薪资select sal from emp where ename SMITH;②比Smith多的select * from emp where sal (select sal from emp where ename SMITH);19.列出所有CLERK(办事员)的姓名及其部门名称,部门的人数①找出部门人数select d.dname,count(*) as total from emp e join dept d on e.deptno d.deptno group by d.dname;②表连接select e.ename,d.dname,t.total from emp e join dept d on e.deptno d.deptno join (select d.dname,count(*) as total from emp e join dept d on e.deptno d.deptno group by d.dname) t on d.dname t.dname where job CLERK;20.列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数①按照工作岗位分组select from emp group by job;②最低薪资大于1500select from emp group by job having min(sal) 1500;③从事此工作的全部雇员人数select job,count(*) from emp group by job having min(sal) 1500;21.列出在部门SALES销售部工作的员工的姓名,假定不知道销售部的部门编号①查询部门的部门编号select deptno from dept where dname SALES;②select ename from emp where deptno (select deptno from dept where dname SALES);22.列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,雇员的工资等级emp e连接dept d连接emp l连接salgrade sselect e.ename,d.dname,l.ename,s.grade from emp e join dept d on e.deptno d.deptno left join emp l on e.mgr l.empno join salgrade s on e.sal between s.losal and s.hisal where e.sal(select avg(sal)from emp);23.列出与SCOTT从事相同工作的所有员工及部门名称select e.ename,d.dname from emp e join dept d on e.deptno d.deptno where e.job (select job from emp where ename SCOTT) and e.ename SCOTT;24.列出薪金等于部门30中员工的薪金的其他员工的姓名和薪金①30部门员工薪资查询出来select distinct sal from emp where deptno 30;②inselect ename,sal from emp where sal in(select distinct sal from emp where deptno 30) and deptno 30;25.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金.部门名称select e.ename,e.sal from emp e join dept d on e.deptno d.deptno where e.sal (select max(sal) from emp where deptno 30);26.列出在每个部门工作的员工数量,平均工资和平均服务期限select d.deptno,count(e.ename) as total,ifnull(avg(e.sal),0) as avgsal,ifnull(avg(datediff(now(),e.hiredate))/365,0) as avgservice from emp e right join dept d on e.deptno d.deptno group by d.deptno;27.列出所有员工的姓名、部门名称和工资select e.ename,d.dname,e.sal from emp e join dept d on e.deptno d.deptno;28.列出所有部门的详细信息和人数select d.deptno,d.dname,d.loc,count(e.ename) as total from emp e right join dept d on e.deptno d.deptno group by d.deptno,d.dname,d.loc;29.列出各种工作的最低工资及从事此工作的雇员姓名select e.ename,t.* from emp e join (select job,min(sal) as minsal from emp group by job) t on e.job t.job and e.sal t.minsal;30.列出各个部门的MANAGER(领导)的最低薪金找出所有的MANAGER按照部门分钟求最小值select deptno,min(sal) from emp where job MANAGER group by deptno;31.列出所有员工的年工资,按年薪从低到高排序年薪月薪补助*12select ename,((sal ifnull(comm,0))*12) as yearsal from emp order by yearsal asc;32.求出员工领导的薪水超过3000的员工名称与领导名称select e.ename 员工,l.ename 领导 from emp e join emp l on e.mgr l.empno where l.sal 3000;33.求出部门名称中,带S字符的部门员工的工资合计、部门人数select d.dname,ifnull(sum(e.sal),0) as sumsal,count(e.ename) as total from emp e right join dept d on e.deptno d.deptno where d.dname like %S% group by d.dname;34.给任职日期超过30年的员工加薪10%--先创建一个新表把emp复制到emp_bak create table emp_bak as select * from emp; --更新语句 update emp_bak set sal sal *1.1 where datediff(now(),hiredate)/ 365 30;35.完成以下任务有3个表S学生表C课程表SC学生选课表SSNOSNAME代表学号姓名CCNOCNAMECTEACHER代表课号课名教师SCSNOCNOSCGRADE代表学号课号成绩CREATE TABLE SC ( SNO VARCHAR(200), CNO VARCHAR(200), SCGRADE VARCHAR(200) ); CREATE TABLE S ( SNO VARCHAR(200 ), SNAME VARCHAR(200) ); CREATE TABLE C ( CNO VARCHAR(200), CNAME VARCHAR(200), CTEACHER VARCHAR(200) ); INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( 1, 语文, 张); INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( 2, 政治, 王); INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( 3, 英语, 李); INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( 4, 数学, 赵); INSERT INTO C ( CNO, CNAME, CTEACHER ) VALUES ( 5, 物理, 黎明); commit; INSERT INTO S ( SNO, SNAME ) VALUES ( 1, 学生1); INSERT INTO S ( SNO, SNAME ) VALUES ( 2, 学生2); INSERT INTO S ( SNO, SNAME ) VALUES ( 3, 学生3); INSERT INTO S ( SNO, SNAME ) VALUES ( 4, 学生4); commit; INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( 1, 1, 40); INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( 1, 2, 30); INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( 1, 3, 20); INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( 1, 4, 80); INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( 1, 5, 60); INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( 2, 1, 60); INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( 2, 2, 60); INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( 2, 3, 60); INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( 2, 4, 60); INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( 2, 5, 40); INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( 3, 1, 60); INSERT INTO SC ( SNO, CNO, SCGRADE ) VALUES ( 3, 3, 80); commit;①.找出没选过“黎明”老师的所有学生姓名。第一步找出黎明老师教的课select CNO from C where CTEACHER黎明;第二步找出所有选黎明老师的学生编号select sno from sc where cno (select CNO from C where CTEACHER黎明);第三步找出没选过的学生select s.* from s where sno not in(select sno from sc where cno (select CNO from C where CTEACHER黎明));②.列出2门以上含2门不及格学生姓名及平均成绩。第一步找出所有不及格的select sno from sc where scgrade 60 group by sno having count(*) 2;第二步找出每个学生的平均成绩select s.sname,avg(sc.SCGRADE) from s join sc on s.sno sc.sno where s.sno in(select sno from sc where scgrade 60 group by sno having count(*) 2) group by s.sname;③.既学过1号课程又学过2号课所有学生的姓名。--学过1号课的学生 select sno from sc where cno 1; --学过2号课的学生 select sno from sc where cno 2; --既学过1号课又学过2号课 select sno from sc where cno 1 and sno in(select sno from sc where cno 2); select sname from s where sno in(select sno from sc where cno 1 and sno in(select sno from sc where cno 2));

相关新闻

2024年最新版云南建设学校网站登陆指南及常见问题详细解析教程

2024年最新版云南建设学校网站登陆指南及常见问题详细解析教程

说实话,每次到了开学季或者期末那会儿,不管是老师还是学生,甚至有时候还得替家里小朋友去查成绩的家长,大家的心情那叫一个复杂。一边是期待,想看看自己这一阶段的努力有没有回报;另一边就是焦虑,担心是不是哪里填错了信息,或者更担心的,是那个让人又爱又恨的入口——…

2026/9/24 23:27:22 阅读更多 →
建站初学者必看网站建设中的html页面核心逻辑与实战避坑指南

建站初学者必看网站建设中的html页面核心逻辑与实战避坑指南

大家好,我是老陈,一个在互联网大厂摸爬滚打多年的前端老鸟,同时也是一家中小型网络公司的技术合伙人。今天不聊那些高大上的架构设计,也不谈那些让人头秃的算法面试题,我想和大家掏心窝子聊聊天,聊聊那些看似基础却真正决定一个网站生死的关键——网站建设中的html页面。…

2026/9/10 21:26:08 阅读更多 →
JADX 从入门到实战:如何快速把 APK 反编译成可读的 Java 代码

JADX 从入门到实战:如何快速把 APK 反编译成可读的 Java 代码

JADX 从入门到实战:如何快速把 APK 反编译成可读的 Java 代码 【免费下载链接】jadx Dex to Java decompiler 项目地址: https://gitcode.com/gh_mirrors/ja/jadx 你有没有遇到过这样的时刻:拿到一个 APK 文件,想知道它的登录逻辑是怎…

2026/9/21 14:21:31 阅读更多 →

最新新闻

Java网上银行转账系统:事务、并发控制与数据库设计实战

Java网上银行转账系统:事务、并发控制与数据库设计实战

简介:这是一份基于Java与JavaScript实现的网上银行转账系统设计源码,面向Java入门开发者、毕业设计选题学生以及需要快速搭建转账业务原型的研发人员。系统覆盖用户认证、账户信息管理、资金转入转出、事务记录与异常处理等核心环节,前端通过…

2026/9/24 23:27:18 阅读更多 →
网络热词‘cua‘的走红密码:直播、短视频与社群传播解析

网络热词‘cua‘的走红密码:直播、短视频与社群传播解析

最近这一个月,我在好几个微信群里刷到同一个词:“cua”。先是我常待的游戏群里有人发,接着生活群、同事群,甚至我们做内容运营的行业大群里面,也时不时有人打出一个“cua”。一开始我以为是某个新游戏的道具音效&#…

2026/9/24 23:27:18 阅读更多 →
线程同步与页面置换:从原理到实战的并发与内存调优指南

线程同步与页面置换:从原理到实战的并发与内存调优指南

刚处理完一个线上服务的并发问题:多个线程同时向一个缓存结构里写数据,明明在代码里加了锁,线上还是偶发数据错乱。排查到最后,问题出在锁的实现方式上——一台高配机器上大量线程并发热切一个锁,互斥锁切换上下文耗掉…

2026/9/24 23:27:18 阅读更多 →
接口自动化测试实战:从工具调试到pytest+requests框架落地

接口自动化测试实战:从工具调试到pytest+requests框架落地

接口自动化测试这件事,很多团队把它想简单了,觉得"用Postman调通几个接口,再用代码跑起来"就算完事。但真正落地过的人都知道,接口自动化最难的从来不是写请求,而是怎么把流程串起来、把环境管明白、把断言写…

2026/9/24 23:27:18 阅读更多 →
RAID原理与实战:从0/1/5/10选型到故障恢复全解析

RAID原理与实战:从0/1/5/10选型到故障恢复全解析

1. 什么是磁盘阵列?它不是“多块硬盘插一起”那么简单很多人第一次听说RAID,脑子里浮现的是一台服务器机箱里密密麻麻插着七八块硬盘,然后理所当然地认为:“哦,这就是RAID——硬盘多,容量大,肯定…

2026/9/24 23:27:18 阅读更多 →
Claude Code并行多会话实战:从单线程到AI团队协作

Claude Code并行多会话实战:从单线程到AI团队协作

1. 从“单线程聊天”到“并行多会话”:这中间到底差了什么先说我自己的一个真实经历。上个月我接了个小项目,要在三天内交付一个带用户登录、数据看板、CSV 导出的小工具。放在以前,我的工作流是打开 Claude Code,起一个会话&…

2026/9/24 23:26:18 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →