MySQL---多表分组查询综合练习

创建dept表

CREATE TABLE dept (

deptno INT(2) NOT NULL COMMENT '部门编号',

dname VARCHAR (15) COMMENT '部门名称',

loc VARCHAR (20) COMMENT '地理位置'

);

添加dept表主键

mysql> alter table dept add primary key(deptno);          

Query OK, 0 rows affected (0.02 sec)                      

Records: 0  Duplicates: 0  Warnings: 0

dept表插入数据

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,'运输部','雁塔区');

查询dept表内容

mysql> select * from dept;  

创建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 '所属部门编号'

);

emp表添加主键

mysql> alter table emp add primary key(empno);     

Query OK, 0 rows affected (0.01 sec)               

Records: 0  Duplicates: 0  Warnings: 0 

emp表添加外键约束    

在MySQL中,可以使用alter  table 语句来添加外键约束。以下是基本的语法:

ALTER TABLE table_name
ADD FOREIGN KEY (column_name) REFERENCES other_table(other_column);
在这个语句中:

  • table_name是你想要添加外键的表的名称。
  • column_name是你想要设置为外键的列的名称。
  • other_table是包含外键引用的表的名称。
  • other_column是在other_table中的列的名称。

 ALTER TABLE emp ADD CONSTRAINT f_ed_key  FOREIGN KEY (deptno)   REFERENCES dept(deptno);

emp表中插入数据

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');

查询emp表的内容

mysql> select * from emp;

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

#在 MySQL 中,group by 语句用于根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 count , sum , avg 等函数。

注意:

当在查询中使用 group by 语句时,只能在 select 语句中包含分组列或使用聚合函数的列。否则,将会报错。

mysql> select deptno 部门号,count(*) 部门的人数,avg(sal) 平均工资 from emp group by deptno;  

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

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

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

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

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

#  在MySQL中,inner join 是一个非常重要的操作,它允许我们将两个或多个表中匹配的行连接在一起。

inner  join on  语法使用 on 关键字来指定连接条件。当我们需要连接两个表时,需要指定一个列或表达式作为连接条件。

mysql> select dname 部门名称,count(*) 部门人数,avg(sal) 平均工 资 from emp e

inner join dept d on e.deptno=d.deptno

group by dname;   

5.要求统计出每个部门的详细信息,并且要求这些部门的平均工资高于2000;

mysql> select d.deptno 部门编号,d.dname 部门名称,loc 位置,count(*) 人数 ,avg(sal) 平均工资 from emp e

inner join dept d on e.deptno=d.deptno

group by dname,d.deptno,loc having avg(sal)>2000;

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

SQL语句分析:先找到“华仔”的工资,然后再利用子查询

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

子查询:

# 在WHERE子句中使用子查询,可以使用比较运算符,例如=,>,<等将子查询返回的单个值与WHERE子句中的表达式进行比较。

注意:

子查询可以在任何使用表达式的地方使用,并且必须在括号中关闭。

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

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

将题目信息进行分解,先找到平均工资

mysql> select avg(sal) from emp;  

利用子查询,找到高于公司平均工资的全部雇员信息

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

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

#在MySQL中,left outer  join 是一种连接查询,它从左表返回所有的行,即使在右表中没有匹配的行。如果在右表中没有匹配的行,结果是NULL。

mysql> select d.deptno 部门编号,dname 名称,loc 位置,count(*) 部门人数,avg(sal) from dept d   left outer join emp e on d.deptno=e.deptno

group by d.deptno,d.dname,d.loc;  

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

# 在MySQL中,having 子句主要用于在group  by 子句对结果进行分组后,对分组后的数据进行筛选和过滤。它允许我们对分组后的结果应用聚合函数,并基于聚合函数的结果进行条件过滤,从而得到我们需要的最终结果集。

mysql> select dname 部门名称,count(*) 员工人数 from emp e inner join

dept d on e.deptno=d.deptno group by dname having count(*)>=1;  

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

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

相关文章

最小生成树(java版)

&#x1f4d1;前言 本文主要是【最小生成树】——最小生成树使用的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一…

什么是VUE 创建第一个VUE实例

一、什么是Vue 概念&#xff1a;Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套 构建用户界面 的 渐进式 框架 Vue2官网&#xff1a;Vue.js 1.什么是构建用户界面 基于数据渲染出用户可以看到的界面 2.什么是渐进式 所谓渐进式就是循序渐进&#xff0c;不一定非得把Vu…

从丘成桐、张益唐的超国民待遇,看孙卫东风光回国的可能性

复旦博士孙卫东在美国流浪16年&#xff0c;这事儿最近在国内媒体沸沸扬扬&#xff0c;围绕着是否让孙卫东回国&#xff0c;国民形成了截然对立的两派&#xff1a;一派呼吁帮其回国&#xff0c;认为他身上流着中国人的血、是我们的同胞&#xff1b;另一派则是反对阻止&#xff0…

SpringMVC环境搭配

概述 Spring MVC是Spring Framework提供的Web组件&#xff0c;全称是Spring Web MVC,是目前主流的实现MVC设计模式的框架&#xff0c;提供前端路由映射、视图解析等功能 mvc是什么 MVC是一种软件架构思想&#xff0c;把软件按照模型&#xff0c;视图&#xff0c;控制器来划分…

Python3+Selenium框架搭建

Webdriver概述 Webdriver (Selenium2&#xff09;是一种用于Web应用程序的自动测试工具&#xff0c; Thoughtworks公司一个强大的基于浏览器的开源自动化测试工具&#xff0c;通常用来编写web应用的自动化测试。 Selenium 是一个用于Web应用程序测试的工具。 Selenium测试直…

【大数据】流处理基础概念(二):时间语义(处理时间、事件时间、水位线)

流处理基础概念&#xff08;二&#xff09;&#xff1a;时间语义 1.流处理场景下一分钟的含义2.处理时间3.事件时间4.水位线5.处理时间与事件时间 本篇博客&#xff0c;我们将介绍流式场景中时间语义和不同的时间概念。我们将讨论流处理引擎如何基于乱序事件产生精确结果&#…

(二十四)Kubernetes系列之Helm3

Helm为kubernetes的包管理工具&#xff0c;就像Linux下的包管理器&#xff08;yum/apt等&#xff09;&#xff0c;可以很方便的将之前打包好的yaml文件部署到kubernetes上。 1.安装访问地址&#xff1a;https://github.com/helm/helm/releases 点击查看最新的版本&#xff0c…

MAXWELL

MAXWELL 一、maxwell是什么 maxwell 官网地址&#xff1a;http://maxwells-daemon.io/ 因为官网是纯英文的&#xff0c;倒是不难懂&#xff0c;但总觉得写的略粗糙&#xff08;也可能笔者英文水平确实拉胯&#xff0c;有待提高&#xff09;。所以还是自己百度了一下。 当my…

一篇搞定大论文参考文献,从找文献到交叉引用全流程

我们在写论文过程中&#xff0c;肯定会引用他人的文献&#xff0c;根据自己的写作经历&#xff0c;总结了一套很实用且不会出错的引用方法。1、记录文献顺序 你在论文中每引用一篇文献&#xff0c;你就在文献后加上[1][2]…[n]&#xff0c;然后新建一个word文档&#xff0c;在…

java使用easyexcel读取excel内容

java 代码读取excel内容。 使用阿里巴巴easyexcel读取excel内容。 ##excel内容 ##依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.5</version></dependency> ##实体类T…

茅台瑞幸合作“龙年酱香巧克力”;黄仁勋英伟达中国区年会;马斯克预言:20年后地球10亿个人形机器人;闲鱼微信小程序即将上线;张雪峰向郑州大学捐款300万

今日精选 • 茅台与瑞幸合作“龙年酱香巧克力”饮品开卖&#xff0c;单杯优惠价18元• 黄仁勋现身英伟达中国区年会• 马斯克支持大胆预言&#xff1a;20年后地球上将有大约10亿个人形机器人• 闲鱼微信小程序即将上线• 张雪峰向郑州大学捐款300万 科技动态 • Adobe 发布 …

安科瑞AEM96系列三相多功能碳结算电能表——安科瑞赵嘉敏

引言 近年来&#xff0c;我国加速推进碳达峰碳中和标准计量体系建设&#xff0c;但随着各地区、各领域、各行业对碳排放核算数据的需求显著提升&#xff0c;当前碳排放核算体系数据更新偏慢、核算口径不一、基础排放因子滞后等一系列问题也开始凸显。新形势下对碳排放统计核算…