MySQL-多表查询(下)

news2024/11/25 15:46:29

♥️作者:小刘在C站

♥️个人主页:小刘主页

♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生!

♥️树高千尺,落叶归根人生不易,人间真情

前言

我们之前在讲解 SQL 语句的时候,讲解了 DQL 语句,也就是数据查询语句,但是之前讲解的查询都是单表查询,而本章节我们要学习的则是多表查询操作上章讲到5.2本章继续

目录

MySQL

6 子查询

6.1 概述

1). 概念

2). 分类

6.2 标量子查询

案例:

6.3 列子查询

 案例:

6.4 行子查询

6.5 表子查询

5.7 多表查询案例

1). 查询员工的姓名、年龄、职位、部门信息 (隐式内连接)

2). 查询年龄小于30岁的员工的姓名、年龄、职位、部门信息(显式内连接)

3). 查询拥有员工的部门ID、部门名称

4). 查询所有年龄大于40岁的员工, 及其归属的部门名称; 如果员工没有分配部门, 也需要展示出

来(外连接)

5). 查询所有员工的工资等级

6). 查询 "研发部" 所有员工的信息及 工资等级

7). 查询 "研发部" 员工的平均工资

8). 查询工资比 "灭绝" 高的员工信息。

9). 查询比平均薪资高的员工信息

10). 查询低于本部门平均工资的员工信息

11). 查询所有的部门信息, 并统计部门的员工人数

12). 查询所有学生的选课情况, 展示出学生名称, 学号, 课程名称


MySQL

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

    MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

    MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。

6 子查询

6.1 概述

1). 概念

SQL 语句中嵌套 SELECT 语句,称为嵌套查询,又称子查询
SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 );

2). 分类

根据子查询结果不同,分为:
A. 标量子查询(子查询结果为单个值)
B. 列子查询 ( 子查询结果为一列 )
C. 行子查询 ( 子查询结果为一行 )
D. 表子查询 ( 子查询结果为多行多列 )
根据子查询位置,分为:
A. WHERE 之后
B. FROM 之后
C. SELECT 之后

6.2 标量子查询

子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。
常用的操作符: = <> > >= < <=

案例:

A. 查询 " 销售部 " 的所有员工信息
完成这个需求时,我们可以将需求分解为两步:
. 查询 " 销售部 " 部门 ID
select id from dept where name = '销售部'; 
. 根据 " 销售部 " 部门 ID, 查询员工信息
select * from emp where dept_id = (select id from dept where name = '销售部');
B. 查询在 " 方东白 " 入职之后的员工信息
完成这个需求时,我们可以将需求分解为两步:
. 查询 方东白 的入职日期
select entrydate from emp where name = '方东白';
. 查询指定入职日期之后入职的员工信息
select * from emp where entrydate > (select entrydate from emp where name = '方东
白');

6.3 列子查询

子查询返回的结果是一列(可以是多行),这种子查询称为列子查询。
常用的操作符: IN NOT IN ANY SOME ALL

 案例:

A. 查询 " 销售部 " " 市场部 " 的所有员工信息
分解为以下两步 :
. 查询 " 销售部 " " 市场部 " 的部门ID        
select id from dept where name = '销售部' or name = '市场部'; 
. 根据部门 ID, 查询员工信息
select * from emp where dept_id in (select id from dept where name = '销售部' or
name = '市场部'); 
B. 查询比 财务部 所有人工资都高的员工信息
分解为以下两步
. 查询研发部所有人工资
select salary from emp where dept_id = (select id from dept where name = '研发部'); 
. 比研发部其中任意一人工资高的员工信息
select * from emp where salary > any ( select salary from emp where dept_id =
(select id from dept where name = '研发部') );

6.4 行子查询

子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
常用的操作符: = <> IN NOT IN

案例:

A. 查询与 " 张无忌 " 的薪资及直属领导相同的员工信息 ;
这个需求同样可以拆解为两步进行 :
. 查询 " 张无忌 " 的薪资及直属领导
select salary, managerid from emp where name = '张无忌'; 
. 查询与 " 张无忌 " 的薪资及直属领导相同的员工信息 ;
select * from emp where (salary,managerid) = (select salary, managerid from emp
where name = '张无忌');

6.5 表子查询

子查询返回的结果是多行多列,这种子查询称为表子查询。
常用的操作符: IN
案例: A. 查询与 " 鹿杖客 " , " 宋远桥 " 的职位和薪资相同的员工信息
分解为两步执行: ① . 查询 " 鹿杖客 " , " 宋远桥 " 的职位和薪资
select job, salary from emp where name = '鹿杖客' or name = '宋远桥'; 1
. 查询与 " 鹿杖客 " , " 宋远桥 " 的职位和薪资相同的员工信息
select * from emp where (job,salary) in ( select job, salary from emp where name =
'鹿杖客' or name = '宋远桥' );
B. 查询入职日期是 "2006-01-01" 之后的员工信息 , 及其部门信息
分解为两步执行 :
. 入职日期是 "2006-01-01" 之后的员工信息
select * from emp where entrydate > '2006-01-01';
. 查询这部分员工 , 对应的部门信息 ;
select e.*, d.* from (select * from emp where entrydate > '2006-01-01') e left
join dept d on e.dept_id = d.id ;

5.7 多表查询案例

数据环境准备 :
create table salgrade(
grade int,
losal int,
hisal int
) comment '薪资等级表';
insert into salgrade values (1,0,3000);
insert into salgrade values (2,3001,5000);
insert into salgrade values (3,5001,8000);
insert into salgrade values (4,8001,10000);
insert into salgrade values (5,10001,15000);
insert into salgrade values (6,15001,20000);
insert into salgrade values (7,20001,25000);
insert into salgrade values (8,25001,30000);
在这个案例中,我们主要运用上面所讲解的多表查询的语法,完成以下的 12 个需求即可,而这里主要涉
及到的表就三张: emp 员工表、 dept 部门表、 salgrade 薪资等级表 。

1). 查询员工的姓名、年龄、职位、部门信息 (隐式内连接)

: emp , dept
连接条件 : emp.dept_id = dept.id
select e.name , e.age , e.job , d.name from emp e , dept d where e.dept_id = d.id;

2). 查询年龄小于30岁的员工的姓名、年龄、职位、部门信息(显式内连接)

: emp , dept
连接条件 : emp.dept_id = dept.id
select e.name , e.age , e.job , d.name from emp e inner join dept d on e.dept_id =
d.id where e.age < 30;

3). 查询拥有员工的部门ID、部门名称

: emp , dept
连接条件 : emp.dept_id = dept.id
select distinct d.id , d.name from emp e , dept d where e.dept_id = d.id; 

4). 查询所有年龄大于40岁的员工, 及其归属的部门名称; 如果员工没有分配部门, 也需要展示出

(外连接)

: emp , dept
连接条件 : emp.dept_id = dept.id
select e.*, d.name from emp e left join dept d on e.dept_id = d.id where e.age >
40 ; 

5). 查询所有员工的工资等级

  
: emp , salgrade
连接条件 : emp.salary >= salgrade.losal and emp.salary <= salgrade.hisal
-- 方式一
select e.* , s.grade , s.losal, s.hisal from emp e , salgrade s where e.salary >=
s.losal and e.salary <= s.hisal;
-- 方式二
select e.* , s.grade , s.losal, s.hisal from emp e , salgrade s where e.salary
between s.losal and s.hisal;

6). 查询 "研发部" 所有员工的信息及 工资等级

: emp , salgrade , dept
连接条件 : emp.salary between salgrade.losal and salgrade.hisal ,
emp.dept_id = dept.id
查询条件 : dept.name = ' 研发部 '
select e.* , s.grade from emp e , dept d , salgrade s where e.dept_id = d.id and (
e.salary between s.losal and s.hisal ) and d.name = '研发部';

7). 查询 "研发部" 员工的平均工资

: emp , dept
连接条件 : emp.dept_id = dept.id
select avg(e.salary) from emp e, dept d where e.dept_id = d.id and d.name = '研发
部';

8). 查询工资比 "灭绝" 高的员工信息。

. 查询 " 灭绝 " 的薪资
   
select salary from emp where name = '灭绝';
. 查询比她工资高的员工数据
select * from emp where salary > ( select salary from emp where name = '灭绝' );

9). 查询比平均薪资高的员工信息

. 查询员工的平均薪资
select avg(salary) from emp;
. 查询比平均薪资高的员工信息
select * from emp where salary > ( select avg(salary) from emp ); 1

10). 查询低于本部门平均工资的员工信息

. 查询指定部门平均薪资
select avg(e1.salary) from emp e1 where e1.dept_id = 1;
select avg(e1.salary) from emp e1 where e1.dept_id = 2;
. 查询低于本部门平均工资的员工信息
select * from emp e2 where e2.salary < ( select avg(e1.salary) from emp e1 where
e1.dept_id = e2.dept_id );

11). 查询所有的部门信息, 并统计部门的员工人数

select d.id, d.name , ( select count(*) from emp e where e.dept_id = d.id ) '人数'
from dept d;

12). 查询所有学生的选课情况, 展示出学生名称, 学号, 课程名称

: student , course , student_course
连接条件 : student.id = student_course.studentid , course.id =
student_course.courseid
select s.name , s.no , c.name from student s , student_course sc , course c where
s.id = sc.studentid and sc.courseid = c.id ;
备注 : 以上需求的实现方式可能会很多 , SQL 写法也有很多,只要能满足我们的需求,查询出符合条件的记录即可。

♥️关注,就是我创作的动力

♥️点赞,就是对我最大的认可

♥️这里是小刘,励志用心做好每一篇文章,谢谢大家

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

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

相关文章

统计:SEM standar deviation of the mean [延长仪表周期 技术点]

平均值标准误差&#xff08;SEM&#xff0c; standard deviation of the mean&#xff09; SD&#xff1a;样本标准差 分母(n-1) SD与SEM区别&#xff1a; 1.SD量化了样本分散值之间的差值有多大&#xff1b; 2.SEM量化了对总体实际平均值的了解程度。其考虑了SD的值和样本量&…

day11 - 手写数字笔迹细化

手写数字笔迹细化 对于手写数字识别实验中&#xff0c;经常会遇到因为笔迹较粗导致误识别的情况&#xff0c;所以我们通常会先将笔迹进行细化&#xff0c;笔迹变细以后&#xff0c;数字的特征会更明显&#xff0c;后续进行识别的准确率就会更高。 例如数字7 和 1 &#xff0c…

2019下半年上午题

2019下半年上午题 b 选a c 最后统一单位 计算需要多少片芯片&#xff1a; 流水线&#xff1a; 也就是&#xff1a; 对于这一道题&#xff1a; c ssl&#xff1a;安全套接层 https&#xff1a;安全通道 PGP&#xff1a;电子邮件加密 d b a b b 受委托方和委…

WWDC2023|苹果已邀请多家VR/AR领域媒体,有望推出首款头显设备

据9to5mac报道&#xff0c;苹果已邀请多位VR/AR领域的记者和创作者参加今年WWDC开发者大会&#xff0c;其中包括UploadVR编辑Ian Hamilton、经常测试AR/VR产品的Norman Chan等&#xff0c;这表明苹果有望推出该领域的相关产品和服务&#xff0c;例如首款VR/AR头显。 根据此前…

动态规划-树形DP

树的重心 题目 链接&#xff1a;https://www.acwing.com/problem/content/848/ 给定一颗树&#xff0c;树中包含 n n n 个结点&#xff08;编号 1 ∼ n 1 \sim n 1∼n&#xff09;和 n − 1 n-1 n−1 条无向边。 请你找到树的重心&#xff0c;并输出将重心删除后&#x…

免费使用GPT4.0?搭载多模态的全新New Bing开放使用教程

目录 1 微软发布新必应2 支持文本生成图像3 支持多模态回答4 历史记录和回答导出5 支持插件化导入 1 微软发布新必应 5月4日&#xff0c;微软基于ChatGPT的搜索引擎New Bing发布了一次大规模更新&#xff0c;并宣布已开放给所有用户&#xff0c;现在无需再排队等待&#xff0c…

实力上榜!ONES 荣获深圳市「专精特新」企业认定

近日&#xff0c;ONES 成功入选 2022 年深圳市专精特新中小企业名单&#xff0c;这标志着 ONES 在研发管理领域专业化、企业数字化程度、质量管理水平、研发创新水平等多个方面得到充分认可和肯定。 深圳市专精特新企业评选是以工业和信息化部、国家统计局、国家发展改革委、财…

Live800:客服系统知识库建设中需要注意的三个要点

互联网的快速发展&#xff0c;让客服行业也随之发生着巨大的变化。传统的客服方式越来越难以满足人们的需求&#xff0c;客户对客服的要求也变得越来越高。在这种情况下&#xff0c;客服系统成为了一种必不可少的工具。 客服系统作为企业与客户沟通的重要渠道&#xff0c;其之所…

聚观早报 | 微软Build开发者大会开幕;阿里云智能裁员7%

今日要闻&#xff1a;微软Build开发者大会开幕&#xff1b;阿里云智能裁员7%&#xff1b;亚马逊中国宣布停止应用商店服务&#xff1b;苹果汽车项目启动已近10年&#xff1b;阿迪达斯中国将重新出售YEEZY系列 微软Build开发者大会开幕 5 月 24 日消息&#xff0c;继两周之前谷…

linux怎么重置密码,CentOS忘记密码,怎么重置密码

1、打开虚拟机 2、在这个界面按 e 进入到这个界面 3、下滑到这个地方&#xff0c;添加这部分代码 init/bin/sh (手动输入&#xff0c;虚拟机算是另一台电脑&#xff0c;复制不过去的) 4、填写完成后按 ctrlx 引导启动 5、输入 mount -o remount, rw / 输入 passwd xxx PS…

Jenkins+GitLab+Docker搭建前端自动化构建镜像容器部署(无本地证书,映射证书)

前言 &#x1f680; 需提前安装环境及知识点&#xff1a; 1、Docker搭建及基础操作 2、DockerFile文件描述 3、Jenkins搭建及基础点 &#x1f680; 目的&#xff1a; 将我们的前端项目打包成一个镜像容器并自动发布部署&#xff0c;可供随时pull访问 一、手动部署镜像及容器 1…

Blazor实战——Known框架增删改查导

本章介绍学习增、删、改、查、导功能如何实现&#xff0c;下面以商品资料作为示例&#xff0c;该业务栏位如下&#xff1a; 类型、编码、名称、规格、单位、库存下限、库存上限、备注 1. 前后端共用 1.1. 创建实体类 在KIMS项目Entities文件夹下创建KmGoods实体类该类继承Ent…

一个程序最多能占用的内存大小

因为内存资源总是稀缺的&#xff0c;即便在拥有百 G 内存的机器上&#xff0c;我们都可以轻易把内存填满。为了解决这个问题&#xff0c;就需要用到虚拟化技术。 GC 是面试的高频重点知识&#xff0c;同时也是程序员日常开发需要理解的部分。学习 GC 有助于你优化你开发应用的性…

1分钟用上ChatGPT,国内用户福音

众所周知的原因&#xff0c;要想在国内使用ChatGPT&#xff0c;肯定是要“折腾一番”的。 但是对于绝大多数普通小白&#xff0c;有没有比较容易的方法就用上官方的ChatGPT呢&#xff1f; 是可以的 最简单的方法就是调用OpenAI官方的API接口 就可以用“曲线救国”的方式用上…

免费部署你的私人 ChatGPT 网页应用

免费部署你的私人 ChatGPT 网页应用 1、注册Github账号&#xff0c;拷贝仓库 第一步、打开GitHub官网&#xff0c;点击右上角Sign up注册即可 第二步、打开开源项目【Chatgpt-next-web】,点击fork&#xff0c;点击Create fork完成操作 2、选择免费的容器【vercel】或者【r…

AI新晋“顶流”ChatGPT将对财务数字化带来哪些影响?

近期ChatGPT持续火热&#xff0c;2个月内&#xff0c;成为最快达成月活超过1亿的现象级应用。无论是科研人员、技术人员还是普通大众都对此非常关注&#xff0c;并惊讶于它强大的对话能力&#xff0c;ChatGPT也在国内持续霸榜热搜&#xff0c;成为大家茶余饭后的热点话题。毫无…

Mentor Pads中的关键技巧和工作方法

凡是从事电子设计的PCB工程师&#xff0c;都会知道在PCB设计工作中提高效率和质量的重要性&#xff0c;只有合理运用EDA软件的关键技巧和工作方法&#xff0c;可加速PCB设计流程&#xff0c;降低错误率&#xff0c;确保项目的成功交付。本文将以Mentor Pads软件为例&#xff0c…

Qt5安装及组件选择(Qt 5.12)

Qt5安装及组件选择&#xff08;Qt 5.12.0&#xff09; 如下图所示&#xff0c;安装Qt时有选择组件这一步&#xff0c;全部安装未免太占磁盘控件&#xff0c;只需安装我们所需要的组件即可。接下来就分析分析各个组件的作用及含义。 “Qt 5.12.0”节点下面是 Qt 的功能模块&a…

红黑树封装set和map(插入部分)

文章目录 前言1.设计大致思路2.改造封装红黑树1.插入节点2.迭代器的实现 3.map和set的封装1.代码实现2.简单测试 前言 之前我们实现了红黑树的插入的部分&#xff0c;本文主要介绍将之前实现的红黑树封装成map和set。我们是以学习的角度来封装容器&#xff0c;不用非要把库中容…

FPGA采集CameraLink相机Base模式解码输出,附带工程源码和技术支持

目录 1、前言2、CameraLink协议基础3、目前我已有的CameraLink收发工程4、设计方案输入CameraLink相机LVDS视频解码视频缓存视频输出软件配置 5、vivado工程详解6、上板调试验证7、福利&#xff1a;工程代码的获取 1、前言 FPGA实现CameraLink视频编解码目前有两种方案&#x…