六、MySQL---综合练习题(单表、多表、分组函数以及等级查询)

news2024/11/28 4:46:17

六、MySQL---综合练习题(单表、多表、分组函数以及等级查询)

    • 1.素材简介
    • 2.创建dept表
    • 3.创建emp表
    • 4.创建salgrade表
    • 解答:
      • 一、单表查询
      • 二、多表查询
      • 三、分组函数查询
      • 四、等级查询

1.素材简介

数据库:dept_emp
1.dept表:deptno’部门编号’、dname’部门名称’、loc’地理位置’;
2.emp表:empno ‘员工编号’、ename ‘员工名字’、job ‘职位’、mgr ‘上司’、hiredate ‘入职时间’、sal ‘基本工资’,comm ‘补贴’,deptno ‘所属部门编号’;
3.salgrade:grade ‘工资等级’、losal ‘最低限额’、hisal ‘最高限额’;
问题:

单表查询
1.选择部门30中的所有员工
2.列出所有办事员的姓名,编号和部门编号
3.找出佣金高于薪金的员工
4.找出没有佣金的员工
5.找出佣金高于薪金的60%的员工
6.找出部门10中所有人事部长和部门20中所有办事员的详细资料
7.找出收取佣金的员工
8.找出不收取佣金或收取的佣金低于100的员工
9.找出姓张的员工的信息
10.显示员工的姓名和受雇日期,新的员工排在最前面
11.按工作的降序排序,若工作相同则按薪金排序
12.查出不姓刘的员工的信息
13.取出姓李的员工
多表查询
1. 查询出每一位雇员的编号、姓名、职位、部门名称、位置
2.要求查询出每一位雇员的姓名、职位、领导的姓名
3.查询出每个雇员的编号、姓名、基本工资、职位、领导的姓名、部门名称及位置。
4.列出在部门"销售部"工作的员工的姓名,假定不知道销售部的部门编号。 
5.列出与"李兴"从事相同工作的所有员工。
6.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。 
7.列出受雇日期早于其直接上级的所有员工。
分组函数查询
1.按照部门编号分组,求出每个部的人数,平均工资
2.按照职位分组,求出每个职位的最高和最低工资
3.计算出每个各职位的平均工资
4.查询出每个部门的名称、部门的人数、平均工资
left outer join on
5.要求统计出每个部门的详细信息,并且要求这些部门的平均工资高于2000;
6.要求查询出工资比华仔还要高的全部雇员信息
7.要求查询出高于公司平均工资的全部雇员信息
8.查询出每个部门的编号、名称、位置、部门人数、平均工资
9.列出至少有一个员工的所有部门。 
等级查询
1.查询每个工资等级各有多少员工
2.查询部门中(所有人)的平均工资等级

2.创建dept表

CREATE TABLE dept (
deptno INT(2) NOT NULL COMMENT '部门编号',
dname VARCHAR (15) COMMENT '部门名称',
loc VARCHAR (20) COMMENT '地理位置' );
-- 添加主键
ALTER TABLE dept ADD PRIMARY KEY (deptno);
-- 添加数据
INSERT INTO dept (deptno,dname,loc)VALUES (10,'财务部','高新四路');
INSERT INTO dept (deptno,dname,loc)VALUES (20,'人事部','科技二路');
INSERT INTO dept (deptno,dname,loc)VALUES (30,'销售部','长安区');
INSERT INTO dept (deptno,dname,loc)VALUES (40,'运输部','雁塔区');

3.创建emp表

CREATE TABLE emp(
	empno INT(4) NOT NULL COMMENT '员工编号',
	ename VARCHAR(10) COMMENT '员工名字',
	job VARCHAR(10) COMMENT '职位',
	mgr INT(4) COMMENT '上司',
	hiredate DATE COMMENT '入职时间',
	sal INT(7) COMMENT '基本工资',
	comm INT(7) COMMENT '补贴',
	deptno INT(2) COMMENT '所属部门编号'
);

-- 添加主键
ALTER TABLE emp ADD PRIMARY KEY (empno);

-- 添加外键约束
ALTER TABLE emp ADD CONSTRAINT f_ed_key
FOREIGN KEY (deptno) 
REFERENCES dept(deptno);
-- 添加数据
INSERT INTO `emp` VALUES('7369','张倩','办事员','7902','2002-12-17','820',NULL,'20');
INSERT INTO `emp` VALUES('7499','刘博','售货员','7698','1992-02-20','1900','300','30');
INSERT INTO `emp` VALUES('7521','李兴','售货员','7698','1995-07-22','1250','500','30');
INSERT INTO `emp` VALUES('7566','李雷','人事部长','7839','1991-04-02','975',NULL,'20');
INSERT INTO `emp` VALUES('7654','刘浩','售货员','7698','1991-09-28','1250','1400','30');
INSERT INTO `emp` VALUES('7698','刘涛','销售部长','7839','1997-05-01','2850',NULL,'30');
INSERT INTO `emp` VALUES('7782','华仔','人事部长','7839','1995-06-09','2450',NULL,'10');
INSERT INTO `emp` VALUES('7788','张飞','人事专员','7566','1998-04-19','3000',NULL,'20');
INSERT INTO `emp` VALUES('7839','马晓云','董事长',NULL,'1991-11-17','5000',NULL,'10');
INSERT INTO `emp` VALUES('7844','马琪','售货员','7698','1996-09-08','1500','0','30');
INSERT INTO `emp` VALUES('7876','李涵','办事员','7788','1997-05-23','1100',NULL,'20');
INSERT INTO `emp` VALUES('7900','李小涵','销售员','7698','1993-2-13','950',NULL,'30');
INSERT INTO `emp` VALUES('7902','张三','人事组长','7566','1992-10-08','3000',NULL,'20');
INSERT INTO `emp` VALUES('7934','张三丰','人事长','7782','1997-06-23','1300',NULL,'10');

4.创建salgrade表

CREATE TABLE salgrade(
grade INT (10) COMMENT '工资等级',
losal INT (10) COMMENT '最低限额',
hisal INT (10) COMMENT '最高限额');
-- 添加数据
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);

测试:
在这里插入图片描述
在这里插入图片描述
至此,所有数据库与表就创建完成了,就可以就行查询了!

解答:

一、单表查询

1.选择部门30中的所有员工

mysql>  select * from emp where deptno=30;

在这里插入图片描述
2.列出所有办事员的姓名,编号和部门编号

mysql> select ename,empno,deptno from emp where job='办事员';

在这里插入图片描述

3.找出佣金高于薪金的员工

mysql> select * from emp where comm > sal;

在这里插入图片描述

4.找出没有佣金的员工

mysql> select * from emp where comm is null or comm=0;

在这里插入图片描述

5.找出佣金高于薪金的60%的员工

mysql> select * from emp where comm is null or comm=0;

在这里插入图片描述

6.找出部门10中所有人事部长和部门20中所有办事员的详细资料

mysql> select * from emp where comm is null or comm=0;

在这里插入图片描述
7.找出收取佣金的员工

mysql> select * from emp where comm >0;

在这里插入图片描述

8.找出不收取佣金或收取的佣金低于100的员工

mysql> select * from emp where comm is NULL or comm<100;

在这里插入图片描述

9.找出姓张的员工的信息

mysql> select * from emp where ename like '张%';

在这里插入图片描述

10.显示员工的姓名和受雇日期,新的员工排在最前面

mysql> select ename,hiredate from emp order by hiredate desc;

在这里插入图片描述

11.按工作的降序排序,若工作相同则按薪金排序

mysql> select * from emp order by job,sal;

在这里插入图片描述

12.查出不姓刘的员工的信息

mysql>  select * from emp where ename not like '刘%';

在这里插入图片描述

13.取出姓李的员工

mysql> select ename from emp where ename like '李%';

在这里插入图片描述

二、多表查询

1.查询出每一位雇员的编号、姓名、职位、部门名称、位置

mysql>select e.empno,e.ename,e.job,d.dname,d.loc from dept d,emp e where d.deptno=e.deptno;

在这里插入图片描述
2.要求查询出每一位雇员的姓名、职位、领导的姓名

mysql> select e.ename,e.job,m.ename
    -> from emp e,emp m
    -> where e.mgr=m.empno;

在这里插入图片描述

3.查询出每个雇员的编号、姓名、基本工资、职位、领导的姓名、部门名称及位置。

mysql> select e.empno,e.ename,e.sal,e.job,e.mgr,d.dname,d.loc
    -> from emp e,emp m,dept d
    -> where e.mgr=m.empno and e.deptno=d.deptno;

在这里插入图片描述

4.列出在部门"销售部"工作的员工的姓名,假定不知道销售部的部门编号。

mysql> select e.empno,e.ename,e.sal,e.job,e.mgr,d.dname,d.loc
    -> from emp e,emp m,dept d
    -> where e.mgr=m.empno and e.deptno=d.deptno;

在这里插入图片描述

5.列出与"李兴"从事相同工作的所有员工。

mysql> select e.* from emp e where e.job=(select el.job from emp el where el.ename='李兴');

在这里插入图片描述

6.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。

mysql> select e.ename,e.sal from emp e where e.sal > all
    -> (select el.sal from emp el where deptno =30);

在这里插入图片描述

7.列出受雇日期早于其直接上级的所有员工。

mysql> select e.* from emp e where ((select el.hiredate from emp el where e.mgr=el.empno)-e.hiredate)>0;

在这里插入图片描述

三、分组函数查询

1.按照部门编号分组,求出每个部的人数,平均工资

mysql> select deptno,count(empno),avg(sal) from emp group by deptno;

在这里插入图片描述

2.按照职位分组,求出每个职位的最高和最低工资

mysql> select job,max(sal) as 最高工资,min(sal) as 最低工资 from emp group by job;

在这里插入图片描述

3.计算出每个各职位的平均工资

mysql> select job,avg(sal) from emp group by job;

在这里插入图片描述

4.查询出每个部门的名称、部门的人数、平均工资

mysql> select d.dname,count(e.empno),avg(e.sal) from emp e,dept d where e.deptno=d.deptno group by dname;

在这里插入图片描述
left outer join on
5.要求统计出每个部门的详细信息,并且要求这
些部门的平均工资高于2000;

mysql> select d.dname,avg(e.sal) a
    -> from dept d left outer join emp e
    -> on d.deptno =e.deptno
    -> group by d.dname
    -> having a > 2000;

在这里插入图片描述

6.要求查询出工资比华仔还要高的全部雇员信息

mysql> select * from emp where sal > (select sal from emp where ename='华仔');

在这里插入图片描述

7.要求查询出高于公司平均工资的全部雇员信息

mysql> select * from emp where sal > (select avg(sal) from emp);

在这里插入图片描述

8.查询出每个部门的编号、名称、位置、部门人数、平均工资

mysql> select d.dname,count(e.deptno) c ,avg(e.sal)
    -> from dept d left outer join emp e
    -> on d.deptno =e.deptno
    -> group by d.dname order by c;

在这里插入图片描述

9.列出至少有一个员工的所有部门。

mysql> select d.deptno,d.dname from dept d where(
    -> select count(e.empno) from emp e
    -> where e.deptno=d.deptno)>1;

在这里插入图片描述

四、等级查询

1.查询每个工资等级各有多少员工

mysql> select s.grade,count(*)
    -> from emp e join salgrade s
    -> on e.sal between s.losal and hisal
    -> group by s.grade;

在这里插入图片描述

2.查询部门中(所有人)的平均工资等级

mysql> select e.deptno,avg(s.grade) avggrade
    -> from emp e join salgrade s
    -> on e.sal between s.losal and hisal
    -> group by e.deptno
    -> order by e.deptno;

在这里插入图片描述

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

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

相关文章

推荐系统|2.1 协同过滤与矩阵分解简介 2.2 协同过滤

文章目录 显式特征和隐式特征协同过滤基于用户的协同过滤基于商品的协同过滤 显式特征和隐式特征 可以类比感性认识和理性认识。 显式特征是指可以直接获取&#xff0c;并且可以用作判断的依据。 而隐式特征是指需要进一步加工分析提炼&#xff0c;才能作为判断的依据。 比如说…

2024-01-16(SpringCloudMybati)

1.前后端分离&#xff1a;前后端分离开发的理解以及和前后端不分离的区别_前后端交互和前后端分离的区别-CSDN博客 2.resultMap是用于sql语句得到的结果集与实体类之间进行关系映射的。 要求&#xff1a;结果集中的列名和实体类的中属性名要一一对应&#xff0c;并且个数保持…

Java 内存模型深度解析

优质博文&#xff1a;IT-BLOG-CN 一、并发编程模型的两个关键问题 【1】并发中常见的两个问题&#xff1a;线程之间如何通信及线程之间如何同步。通信是指线程之间以何种机制来交换信息。在命令式编程中&#xff0c;线程之间的通信机制有两种&#xff1a;内存共享和消息传递&…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--大模型、扩散模型、视觉导航

专属领域论文订阅 关注{晓理紫}&#xff0c;每日更新论文&#xff0c;如感兴趣&#xff0c;请转发给有需要的同学&#xff0c;谢谢支持 关注留下邮箱可每日定时收到论文更新服务 分类: 大语言模型LLM视觉模型VLM扩散模型视觉导航具身智能&#xff0c;机器人强化学习开放词汇&a…

大创项目推荐 深度学习验证码识别 - 机器视觉 python opencv

文章目录 0 前言1 项目简介2 验证码识别步骤2.1 灰度处理&二值化2.2 去除边框2.3 图像降噪2.4 字符切割2.5 识别 3 基于tensorflow的验证码识别3.1 数据集3.2 基于tf的神经网络训练代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x…

数据结构Java版(2)——栈Stack

一、概念 栈也是一种线性数据结构&#xff0c;最主要的特点是入栈顺序和出栈顺序是相反的&#xff0c;操作时只能从栈顶进行操作&#xff0c;在Java中给我们提供了一个泛型栈——Stack&#xff0c;其中最常用的方法有&#xff1a; void push(E):进栈E pop():退栈E peek():查看…

SpringBoot解决Slow HTTP慢速攻击漏洞

项目场景&#xff1a; 扫描到的漏洞截图&#xff1a; 攻击原理&#xff1a; Web应用在处理HTTP请求之前都要先接收完所有的HTTP头部&#xff0c;因为HTTP头部中包含了一些Web应用可能用到的重要的信息。攻击者利用这点&#xff0c;发起一个HTTP请求&#xff0c;一直不停的发送…

Divisibility Problem-codefordes

题目链接&#xff1a;Problem - A - Codeforces 解题思路&#xff1a; 如果 a 能被 b整除&#xff0c;就不需要进行改变&#xff0c;直接输出0&#xff0c;否则输出((a / b) 1) * b - a&#xff0c;找到最小的能被b整除的数。 下面是c代码&#xff1a; #include<iostrea…

数组、数组的删除添加、函数、返回值、匿名函数、回调函数

一、数组 概念&#xff1a;将多个元素按一定顺序排列放在一个集合中 创建数组&#xff08;两种&#xff09;&#xff1a; 字面量创建 构造函数创建 数组的长度&#xff08;length&#xff09;、类型 空数组 长度为0数组是object 引用类型 如何获取数组中单个元素 索引&…

【Linux】03 GCC编译器的使用

一、编译过程 在使用gcc编译程序时&#xff0c;编译过程可以简要划分为4个阶段&#xff1a; 预处理、编译、汇编、链接 1.1 预处理&#xff08;preprocessing&#xff09; 这个阶段主要处理源文件中的#indef、#include和#define预处理命令&#xff1b; 这里主要是把一些include…

c JPEG 1D DCT 优化二(AAN)

这两个图可能就是AAN 的数学模型 优化DCT就是用代码实现矩阵9,10 9和10已经把64个系数缩小到一半32个了。光从这两图可看出&#xff0c;优化后乘法少了64-32436个&#xff0c;加法少了64-32-824。估计优化时间可少百分之40左右。o[0]的4个cos系数都是1&#xff0c;可省4个乘法…

RS-485通讯

RS-485通讯协议简介 与CAN类似&#xff0c;RS-485是一种工业控制环境中常用的通讯协议&#xff0c;它具有抗干扰能力强、传输距离远的特点。RS-485通讯协议由RS-232协议改进而来&#xff0c;协议层不变&#xff0c;只是改进了物理层&#xff0c;因而保留了串口通讯协议应用简单…

预约上门按摩app开发需要具备哪些材料

开发上门按摩预约系统的功能模块&#xff0c;包括用户端、技师端和管理后台。 设计阶段&#xff1a;根据需求分析结果&#xff0c;进行界面设计和数据库设计&#xff0c;并编写相应的技术文档。 开发阶段&#xff1a;根据设计文档&#xff0c;进行上门按摩预约系统的开发工作&a…

spring boot shardingsphere mybatis-plus druid mysql 搭建mysql数据库读写分离架构

spring boot shardingsphere mybatis-plus druid mysql 搭建mysql数据库读写分离架构 ##关于window mysql主从搭建简单教程 传送门 window mysql5.7 搭建主从同步环境-CSDN博客 ##父pom.xml <?xml version"1.0" encoding"UTF-8"?> <project…

YOLOv8算法改进【NO.99】引入最新发布Deformable Convolution v4 (DCNv4)

前 言 YOLO算法改进系列出到这&#xff0c;很多朋友问改进如何选择是最佳的&#xff0c;下面我就根据个人多年的写作发文章以及指导发文章的经验来看&#xff0c;按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通&#xff1a; 第一…

常用排序算法总结(直接插入排序、选择排序、冒泡排序、堆排序、快速排序、希尔排序、归并排序)

目录 一. 直接插入排序 二:选择排序 三:冒泡排序 四.堆排序 五:希尔排序 六:快速排序(递归与非递归) 七.归并排序(递归与非递归) 一. 直接插入排序 &#x1f31f;排序思路 直接插入排序的基本原理是将一条记录插入到已排好的有序表中&#xff0c;从而得到一个新的、记录…

C++大学教程(第九版)5.25去除break语句 5.27去除cintinue语句

5.25题目 (去除break和continue)break和continue 语句遭到质疑的原因是它们的非结构化性。实际上,break和continue 语句总能用结构化的语句取代。请详述如何从程序的一条循环语中去除break语句&#xff0c;并用某种结构化的手段替代。提示:break 语句用于在循环体内离开一个循…

【分布式监控】zabbix与grafana连接

1.在zabbix- server服务端安装grafana&#xff0c;并启动服务 先在官网下载软件 https://grafana.com/grafana/download/9.4.7?editionenterprise&pggraf&plcmtdeploy-box-1#可以翻译成中文介绍&#xff0c;很详细的教程 yum install -y https://dl.grafana.com/ent…

拓展坞的广泛应用场景

在当今数字化时代&#xff0c;我们的生活与各种电子设备紧密相连。为了方便使用和管理这些设备&#xff0c;拓展坞应运而生&#xff0c;成为我们生活中不可或缺的配件。本文将介绍拓展坞的概念、功能和在生活中的应用&#xff0c;以及如何选择合适的拓展坞。 添加图片注释&…

LeetCode、162. 寻找峰值【中等,最大值、二分】

文章目录 前言LeetCode、162. 寻找峰值【中等&#xff0c;最大值、二分】题目及类型思路及代码思路1&#xff1a;二分思路2&#xff1a;寻找最大值 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿…