MySQL总结练习题

目录

1.准备数据表

2.表之间的关系

3.题目

3.1 取得每个部门最高薪水的人员名称

3.2 哪些人的薪水在部门的平均薪水之上

3.3 取得部门中(所有人的)平均的薪水等级

3.4 不准用组函数(Max ),取得最高薪水

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

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

3.6 取得薪水最高的第六至第十名员工

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

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

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

3.10 列出薪金比"SMITH" 多的所有员工信息

3.11 列出所有"CLERK"( 办事员) 的姓名及其部门名称, 部门的人数

3.12 列出最低薪金大于 1500 的各种工作及从事此工作的全部雇员人数按照工作岗位分组求最小值。


对之前学习的mysql基础和进阶进行一些练习,巩固前面学完的知识。

1.准备数据表


CREATE TABLE DEPT(DEPTNO int(2) not null ,DNAME VARCHAR(14) ,LOC VARCHAR(13),primary key (DEPTNO));
CREATE TABLE EMP(EMPNO int(4)  not null ,ENAME VARCHAR(10),JOB VARCHAR(9),MGR INT(4),HIREDATE DATE  DEFAULT NULL,SAL DOUBLE(7,2),COMM DOUBLE(7,2),primary key (EMPNO),DEPTNO INT(2));CREATE TABLE SALGRADE( GRADE INT,LOSAL INT,HISAL INT );INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (
10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (
20, 'RESEARCH', 'DALLAS');
INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (
30, 'SALES', 'CHICAGO');
INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (
40, 'OPERATIONS', 'BOSTON');
commit;INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7369, 'SMITH', 'CLERK', 7902,  '1980-12-17'
, 800, NULL, 20);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7499, 'ALLEN', 'SALESMAN', 7698,  '1981-02-20'
, 1600, 300, 30);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7521, 'WARD', 'SALESMAN', 7698,  '1981-02-22'
, 1250, 500, 30);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7566, 'JONES', 'MANAGER', 7839,  '1981-04-02'
, 2975, NULL, 20);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7654, 'MARTIN', 'SALESMAN', 7698,  '1981-09-28'
, 1250, 1400, 30);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7698, 'BLAKE', 'MANAGER', 7839,  '1981-05-01'
, 2850, NULL, 30);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7782, 'CLARK', 'MANAGER', 7839,  '1981-06-09'
, 2450, NULL, 10);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7788, 'SCOTT', 'ANALYST', 7566,  '1987-04-19'
, 3000, NULL, 20);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7839, 'KING', 'PRESIDENT', NULL,  '1981-11-17'
, 5000, NULL, 10);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7844, 'TURNER', 'SALESMAN', 7698,  '1981-09-08'
, 1500, 0, 30);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7876, 'ADAMS', 'CLERK', 7788,  '1987-05-23'
, 1100, NULL, 20);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7900, 'JAMES', 'CLERK', 7698,  '1981-12-03'
, 950, NULL, 30);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7902, 'FORD', 'ANALYST', 7566,  '1981-12-03'
, 3000, NULL, 20);
INSERT INTO EMP ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM,
DEPTNO ) VALUES (
7934, 'MILLER', 'CLERK', 7782,  '1982-01-23'
, 1300, NULL, 10);
commit;INSERT INTO SALGRADE ( GRADE, LOSAL, HISAL ) VALUES (
1, 700, 1200);
INSERT INTO SALGRADE ( GRADE, LOSAL, HISAL ) VALUES (
2, 1201, 1400);
INSERT INTO SALGRADE ( GRADE, LOSAL, HISAL ) VALUES (
3, 1401, 2000);
INSERT INTO SALGRADE ( GRADE, LOSAL, HISAL ) VALUES (
4, 2001, 3000);
INSERT INTO SALGRADE ( GRADE, LOSAL, HISAL ) VALUES (
5, 3001, 9999);
commit;

之间运行上面的sql,需要用到的数据表就建立好了。

2.表之间的关系

  1. DEPT(部门表):

    • DEPTNO:部门编号,整数类型,主键。
    • DNAME:部门名称。
    • LOC:部门所在地。
  2. EMP(员工表):

    • EMPNO:员工编号,整数类型,主键。
    • ENAME:员工姓名。
    • JOB:员工职位。
    • MGR:上级经理的员工编号,整数类型。
    • HIREDATE:入职日期,日期类型,默认为NULL。
    • SAL:薪资。
    • COMM:奖金。
    • DEPTNO:所属部门编号,整数类型。
  3. SALGRADE(薪资等级表):

    • GRADE:薪资等级,整数类型。
    • LOSAL:最低薪资,整数类型。
    • HISAL:最高薪资,整数类型。

3.题目

3.1 取得每个部门最高薪水的人员名称

思路:

  1. 使用INNER JOIN将EMP表和DEPT表连接,以获取员工和其所在部门的相关信息。

  2. 使用子查询,计算每个部门的最高薪水。子查询中使用GROUP BY和MAX函数来找到每个部门的最高薪水。

  3. 在主查询中,通过比较员工的薪水和其所在部门的最高薪水,筛选出薪水等于最高薪水的员工。

  4. 结果集中包括了每个部门中薪水最高的员工的姓名、部门名称和薪水。

select d.dname as "部门名称", e.ename as "员工姓名", e.sal as "薪水"
from emp e
inner join dept d on e.deptno = d.deptno
where (e.deptno, e.sal) in (select deptno, max(sal)from empgroup by deptno
);

结果:

3.2 哪些人的薪水在部门的平均薪水之上

思路:

  1. 主查询中使用INNER JOIN连接EMP表(e)和DEPT表(d),以获取员工和其所在部门的相关信息。

  2. 使用INNER JOIN连接一个子查询,该子查询计算每个部门的平均薪水。子查询中使用GROUP BY和AVG函数来计算每个部门的平均薪水。

  3. 在主查询中,通过比较员工的薪水(e.sal)和其所在部门的平均薪水(dept_avg.avg_dept_salary),筛选出薪水高于所在部门平均薪水的员工。

  4. 结果集包括了员工姓名、员工薪水、部门名称和部门平均薪水,以便比较员工薪水与部门平均薪水。

SELECT e.ename AS "员工姓名", e.sal AS "员工薪水", d.dname AS "部门名称", avg_dept_salary AS "部门平均薪水"
FROM emp e
INNER JOIN dept d ON e.deptno = d.deptno
INNER JOIN (SELECT deptno, AVG(sal) AS avg_dept_salaryFROM empGROUP BY deptno
) dept_avg ON e.deptno = dept_avg.deptno
WHERE e.sal > dept_avg.avg_dept_salary;

结果:

3.3 取得部门中(所有人的)平均的薪水等级

1.首先要取得所有人的薪水等级再按部门编号分组

2.按照部门编号分组后再取平均值

select e.DEPTNO as '部门编号',avg(s.GRADE) as '部门平均薪资等级'from emp einner join salgrade son e.SAL between s.LOSAL and s.HISAL group by  e.DEPTNO;

3.4 不准用组函数(Max ),取得最高薪水

第一种方法:使用降序取第一个数据

select ENAME,SAL from emp order by SAL desc limit 1;

第二种方法:使用自连接再进行not in 去查找

select SAL from emp where sal 
not in (select distinct a.SAL from emp a join emp b on a.SAL < b.SAL)

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

用avg取平均值,按照deptno分组,最后降序排序取第一个值

select DEPTNO as '部门编号',avg(SAL) as '平均薪水' from emp 
group by DEPTNO order by avg(SAL) desc limit 1;

 

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

按照dname来分组最后采用降序排序

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;

3.6 取得薪水最高的第六至第十名员工

降序排序取6-10

select ENAME,SAL from emp order by sal desc limit 5,5;

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

按照grand进行分组再求和

select s.GRADE,COUNT(*) from emp e 
inner join salgrade s 
on e.SAL between s.LOSAL and s.HISAL 
group by s.GRADE;

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

select a.ENAME '员工' ,b.ENAME '领导' from emp a 
left join emp b on a.mgr = b.EMPNO;

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

  1. 使用INNER JOIN将EMP表(e)和DEPT表(d)连接,以获取员工和其所在部门的相关信息。

  2. 使用GROUP BY子句按部门名称(d.dname)进行分组,以计算每个部门中的员工数量。

  3. 使用HAVING子句筛选出员工数量至少为5的部门。

select d.DNAME as '部门名称',count(*) as '员工数量'  
from emp e inner join dept d on e.DEPTNO = d.DEPTNO 
group by d.DNAME having count(*) >= 5;

3.10 列出薪金比"SMITH" 多的所有员工信息

直接筛选出来然后比较就行

select ENAME,SAL from emp 
where SAL > (select SAL from emp where ename = 'SMITH') order by SAL desc ;

3.11 列出所有"CLERK"( 办事员) 的姓名及其部门名称, 部门的人数

1.从EMP表中选择职位为"CLERK"的员工的姓名(ename)、所在部门编号(deptno)。

2.使用INNER JOIN将上述查询结果与DEPT表连接,以获取员工所在部门的名称(dname)。

3.使用子查询计算每个部门的员工人数,并使用GROUP BY子句按部门编号进行分组。

4.最后,将上述查询的结果用作子查询,并再次使用INNER JOIN将部门人数(deptcount)与部门名称(dname)连接,以获取最终结果。

SELECT t1.ename AS "员工姓名", t1.dname AS "部门名称", t2.deptcount AS "部门人数"
FROM (SELECT e.ename, d.dname, e.deptnoFROM emp eJOIN dept d ON e.deptno = d.deptnoWHERE e.job = 'CLERK'
) t1
JOIN (SELECT deptno, COUNT(*) AS deptcountFROM empGROUP BY deptno
) t2 ON t1.deptno = t2.deptno;

3.12 列出最低薪金大于 1500 的各种工作及从事此工作的全部雇员人数按照工作岗位分组求最小值。

select job,sal, count(*) as '从事该工作工资低于1500的人数' from emp  
group by job having min(SAL) > 1500;

 后续会继续增加些题目。。。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/100415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】归并排序和计数排序(排序的总结)

目录 一&#xff0c;归并排序的递归 二&#xff0c;归并排序的非递归 三&#xff0c;计数排序 四&#xff0c;排序算法的综合分析 一&#xff0c;归并排序的递归 基本思想&#xff1a; 归并采用的是分治思想&#xff0c;是分治法的一个经典的运用。该算法先将原数据进行拆…

BUUCTF SimpleRev

分析 该文件为64位的ELF文件&#xff0c;运行在linux平台 使用IDA64打开 进入Decry函数 输入flag和成功的提示 看看如何才能成功拿到flag 这里比较text和str2&#xff0c;text是源代码就有的 那么str2应该就是我们输入的内容 先分析text的内容是什么 进入join函数 该函数…

SpringBoot项目整合MybatisPlus持久层框架+Druid数据库连接池

前言 之前搭建SpringBoot项目工程&#xff0c;所使用的持久层框架不是Mybatis就是JPA&#xff0c;还没试过整合MybatisPlus框架并使用&#xff0c;原来也如此简单。在此简单记录一下在SpringBoot项目中&#xff0c;整合MybatisPlus持久层框架、Druid数据库连接池的过程。 一、…

Eclipse iceoryx(千字自传)

1 在固定时间内实现无任何限制的数据传输 在汽车automotive、机器人robotics和游戏gaming等领域,必须在系统的不同部分之间传输大量数据。使用Linux等操作系统时,必须使用进程间通信(IPC)机制传输数据。Eclipse iceoryx是一种中间件,它使用零拷贝Zero-Copy、共享内存Share…

【OSPF宣告——network命令与多区域配置实验案例】

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大二在校生&#xff0c;喜欢编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;小新爱学习. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc…

win10电脑插入耳机,右边耳机声音比左边小很多

最近使用笔记本看视频&#xff0c;发现插入耳机&#xff08;插入式和头戴式&#xff09;后&#xff0c;右边耳机声音比左边耳机声音小很多很多&#xff0c;几乎是一边很清晰&#xff0c;另一边什么都听不到。 将耳机插到别人电脑上测试耳机正常&#xff0c;那就是电脑的问题。试…

自然语言处理(NLP)的开发框架

自然语言处理&#xff08;NLP&#xff09;领域有许多开源的框架和库&#xff0c;用于处理文本数据和构建NLP应用程序。以下是一些常见的NLP开源框架及其特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合…

Outlook屏蔽Jira AI提醒

前言&#xff1a;最近不知道为什么jira上的ai小助手抽风&#xff0c;一周发个几千封邮件…导致我现在都不想在邮箱里面跟找垃圾一样找消息了。实在忍无可忍&#xff0c;决定屏蔽AI小助手&#xff0c;方法很简单&#xff0c;follow me~~ 第一步&#xff1a;双击打开电脑版Outloo…

springboot家乡特色推荐系统springboot28

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

leetCode 1143.最长公共子序列 动态规划 + 滚动数组

1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串…

Oracle Database Express Edition (XE)配置与部署

获取下载安装包 https://www.oracle.com/cn/database/technologies/xe-downloads.htmlhttps://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/index.html安装.rpm安装包 cd /usr/local/src wget https://download.oracle.com/otn-pub/otn_software/db-express/oracle-d…

Linux下kibana的安装与配置

1. 环境配置 确保Linux服务器上已安装Java 8或更高版本。可以通过运行 java -version 来验证Java的版本。 下载Kibana 7.17.11的压缩文件&#xff0c;可以从Kibana 7.17.11下载 上传服务器&#xff0c;并解压Kibana压缩文件。 2. Kibana配置 编辑Kibana的配置文件 config/k…

Idea下面git的使用:变基、合并、优选、还原提交、重置、回滚、补丁

多分支和分支切换 变基和合并 变基是把本项目的所有提交都列出来按顺序一个个提交到目标分支上去 而合并是把两个分支合并起来&#xff0c;但是旧的分支还是可以启动其他分支&#xff0c;在旧的分支上继续开发 master: A -- B -- C -- M/ feature: D -- Emaster: A -…

粘性文本整页滚动效果

效果展示 CSS 知识点 background 相关属性综合运用position 属性的 sticky 值运用scroll-behavior 属性运用scroll-snap-type 属性运用scroll-snap-align 属性运用 整体页面效果实现 <div class"container"><!-- 第一屏 --><div class"sec&qu…

JAVA编程题-求矩阵螺旋值

螺旋类 package entity; /*** 打印数组螺旋值类*/ public class Spiral { // 数组行private int row; // 数组列private int col; // 行列数private int size; // 当前行索引private int rowIndex; // 当前列索引private int colIndex; // 行开始索引private int rowStart; //…

Docker---cgroups资源限制

目录 一、cpu资源控制 1、 设置cpu使用率上限 2、设置cpu资源占用比&#xff08;设置多个容器时才有效&#xff09; 3、设置容器绑定指定的CPU 三、内存资源控制 四、磁盘IO配额控制 1、限制Block IO 2、限制bps和iops进行限制 一、cpu资源控制 cgroups是一个非常强大的…

web基础以及http协议

web基础&#xff0c;http协议 域名&#xff1a;www.88886.co DNS解析 静态页面 动态页面 DNS域名&#xff1a; 网络上的通信都是基于IP通信模式&#xff1a;TCP/IP TCP建立连接和断开连接&#xff0c;都是要双方进行确认的 建立连接&#xff1a;三次握手 断开连接&#x…

Spring源码解析(十二):TransactionInterceptor事务拦截器

Spring源码系列文章 Spring源码解析(一)&#xff1a;环境搭建 Spring源码解析(二)&#xff1a;bean容器的创建、默认后置处理器、扫描包路径bean Spring源码解析(三)&#xff1a;bean容器的刷新 Spring源码解析(四)&#xff1a;单例bean的创建流程 Spring源码解析(五)&…

dockerfile lnmp 搭建wordpress、docker-compose搭建wordpress

-----------------安装 Docker--------------------------- 目前 Docker 只能支持 64 位系统。systemctl stop firewalld.service setenforce 0#安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 --------------------------------------------------…

NoSQL之Redis 主从复制配置详解及哨兵模式

目录 1 Redis 主从复制 1.1 主从复制的作用 1.2 主从复制流程 2 搭建Redis 主从复制 2.1 安装 Redis 2.2 修改 Redis 配置文件&#xff08;Master节点操作&#xff09; 2.3 修改 Redis 配置文件&#xff08;Slave节点操作&#xff09; 2.4 验证主从效果 3 Redis 哨兵模…