MySQL的复合查询

news2024/12/24 2:42:30

在这里插入图片描述

文章目录

  • 1. 多表查询
  • 2. 自连接
  • 3. 子查询
    • 3.1 单行子查询
    • 3.2 多行单列子查询
    • 3.3 单行多列子查询
    • 3.4 在from子句中使用子查询
  • 4. 合并查询
    • 4.1 union all
    • 4.2 union
  • 5. 内连接
  • 6. 外连接
    • 6.1 左外连接
    • 6.2 右外连接

1. 多表查询

前面我们讲解的mysql表的查询都是对一张表进行查询,在实际开发中这远远不够。实际开发中往往数据来自不同的表,所以需要多表查询。我们还是用一个简单的公司管理系统,有三张表EMP、DEPT、SALGRADE来演示如何进行多表查询。

显示雇员名、雇员工资以及所在部门的名字因为上面的数据来自EMP和DEPT表,因此要联合查询。
在这里插入图片描述
可以看到雇员名、雇员工资在员工表,部门的名字在另外一张表。但是MySQL支持查询多张表。
在这里插入图片描述
它是从第一张表中选出第一条记录,和第二条表的所有记录进行组合。然后从第一张表中选出第二条记录,再和第二条表的所有记录进行组合,依此类推。
在这里插入图片描述
不加过滤条件,得到的结果称为笛卡尔积,它的本质其实就是数据的穷举。
因为是穷举,有许多的消息是没有意义的,在这个表中,部门号不一样的就没有意义,所以我们需要过滤掉。
在这里插入图片描述
在判断的时候,我们需要指明是哪张表的字段才能进行比较。下面我们再进行筛选:
在这里插入图片描述
多表查询的思路:
1.先确定和哪些表有关
2.把多张表转成一张表
3.根据要求进行比较过滤

显示各个员工的姓名,工资,及工资级别:
员工表在emp中,工作级别在salgrade表中:
在这里插入图片描述
因为薪水是在一个范围的,所以我们可以通过这个范围来过滤。

2. 自连接

自连接是指在同一张表连接查询。
在这里插入图片描述
我们直接自链接是不可以的,需要先给表重命名才能进行自链接。

显示员工FORD的上级领导的编号和姓名(mgr是员工领导的编号–empno):
在这里插入图片描述
我们要找一个员工上级领导的姓名,因为上级领导也是员工,所以他也在这个表里。
方法一:使用的子查询
在MySQL中select是支持嵌套的:
在这里插入图片描述
这是分两步的查询,我们也可以合在一起。
在这里插入图片描述

方法二:使用多表查询(自查询)
在这里插入图片描述
我们先把所有的结果算出来了,下面我们就开始进行筛选,如果表1里的mgr等于表2的empno就是有效的:
在这里插入图片描述

3. 子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

3.1 单行子查询

返回一行记录的子查询
显示和SMITH员工同一部门的员工
在这里插入图片描述

3.2 多行单列子查询

返回多行记录的子查询
in关键字;查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的
首先,我们先把10号部门的工作岗位列举出来:
在这里插入图片描述
那么我们就需要找出其它部门和这几个岗位相同的,这里我们就需要使用关键字in:
在这里插入图片描述
in的意思是在这个范围中任何一个就被筛选出来。

最后我们需要把10号部门的给去掉:
在这里插入图片描述

all关键字;显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号
按照之前的方法:
在这里插入图片描述
我们先把30号部门的最高工资取出来,然后用其它部门的来进行比较。

用all关键字:
在这里插入图片描述
这是30号部门的所有人的工资。
在这里插入图片描述
any关键字;显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)
在这里插入图片描述

3.3 单行多列子查询

单行子查询是指子查询只返回单列,单行数据。多行子查询是指返回单列多行数据。都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句。

查询和SMITH员工的部门和岗位完全相同的所有雇员,不含SMITH本人
在这里插入图片描述
我们要查询工作和部门都是这个的员工。
在这里插入图片描述
最后我们需要把SMITH自己给去掉。
在这里插入图片描述

3.4 在from子句中使用子查询

我们知道多表查询,在from后面是可以跟多张表进行笛卡尔积的。
在这里插入图片描述
在前面我们可以把查询的结果看作成一张表,然后进行笛卡尔积:
在这里插入图片描述
显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资
在这里插入图片描述
我们先把每个部门的平均工资算出来。然后和我们的员工进行笛卡尔积。
在这里插入图片描述
最后根据这个表来筛选:
在这里插入图片描述
查找每个部门工资最高的人的姓名、工资、部门、最高工资
在这里插入图片描述
首先,我们把每个部门的最高工资查出来。
在这里插入图片描述
然后我们和员工表进行笛卡尔积,把有效数据筛选出来。
在这里插入图片描述

4. 合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all

4.1 union all

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行

将工资大于25000或职位是MANAGER的人找出来
在这里插入图片描述

4.2 union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行

将工资大于2500或职位是MANAGER的人找出来
在这里插入图片描述
这里去掉了重复记录。

5. 内连接

表的连接分为内连和外连。内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。

正规的语法:
在这里插入图片描述
显示SMITH的名字和部门名称:

用前面的写法:
在这里插入图片描述
用标准的内连接写法:
在这里插入图片描述

6. 外连接

外连接分为左外连接和右外连接。

6.1 左外连接

如果联合查询,左侧的表完全显示我们就说是左外连接
在这里插入图片描述
举个例子:
我们先建两张表:
在这里插入图片描述
我们先创建一个学生表,然后插入4条数据。
在这里插入图片描述
我们在成绩表也插入一些数据,但是两个表对应不上。

查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来
在这里插入图片描述
当左边表和右边表没有匹配时,也会显示左边表的数据。

6.2 右外连接

如果联合查询,右侧的表完全显示我们就说是右外连接
在这里插入图片描述
对stu表和exam表联合查询,把所有的成绩都显示出来,即使这个成绩没有学生与它对应,也要显示出来
在这里插入图片描述

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

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

相关文章

[架构之路-230]:计算机硬件与体系结构 - 可靠性、可用性、稳定性;MTTF、MTTR、MTBF

目录 一、软件质量属性 二、可靠性、可用性、稳定性区别 2.1 比较 2.2 公式比较 2.3 "正常工作时间"和"正常运行时间" 2.4 比较案例 2.5 可用性好但可靠性较差的示例 三、MTTF、MTTR、MTBF 3.1 图示 3.2 定义 (1)MTTF&am…

【uniapp+vue3+ts】请求函数封装,请求和上传文件拦截器

1、uniapp 拦截器 uni.addInterceptor(STRING,OBJECT) 拦截器中包括基础地址、超时时间、添加请求头标识、添加token utils文件夹下新建http.ts 拦截uploadFile文件上传,rquest请求接口 cosnt baseUrl xxxx// 添加拦截器 const httpInterceptor {//拦截前触发i…

Python逐日填补Excel中的日期并用0值填充缺失日期的数据

本文介绍基于Python语言,读取一个不同的列表示不同的日期的.csv格式文件,将其中缺失的日期数值加以填补;并用0值对这些缺失日期对应的数据加以填充的方法。 首先,我们明确一下本文的需求。现在有一个.csv格式文件,其第…

几种开源协议的区别(Apache、MIT、BSD、MPL、GPL、LGPL)

作为一名软件开发人员,你一定也是经常接触到开源软件,但你真的就了解这些开源软件使用的开源许可协议吗? 你不会真的认为,开源就是完全免费吧?那么让我们通过本文来寻找答案。 一、开源许可协议简述 开源许可协议是指开…

CI/CD工具中的CI和CD的含义

CI/CD工具中的CI和CD的含义? CI/CD 是现代软件开发方法中广泛使用的一种方法。其中,CI 代表持续集成(Continuous Integration),CD 则有两层含义,一是持续交付(Continuous Delivery)…

Linux CentOS7 vim寄存器

计算机中通常所说的寄存器Register一般指的是CPU中的寄存器,用来暂存CPU处理所需要的指令、数据等。 vim中同样也有寄存器,使用的方式和CPU非常类似。 vim中的寄存器(register)作用和windows中的剪切板类似,不过vim中的寄存器不止一个&…

前后端协议后端统一返回格式Result

/*** 后端统一返回结果* param <T>*/ Data public class Result<T> implements Serializable {private Integer code; //编码&#xff1a;1成功&#xff0c;0和其它数字为失败private String msg; //错误信息private T data; //数据public static <T> Result…

STM32芯片为什么有那么多组VDD?

对于一般的IC元器件通常只有两个电源引脚&#xff0c;一个是Vcc或Vdd&#xff0c;和GND或Vss。学习过32单片机的小伙伴肯定都会有这个发现&#xff0c;32单片机有多组VDD&#xff0c;单片机的引脚资源那么珍贵&#xff0c;为什么要在这里浪费那么多引脚呢&#xff1f;还有就是引…

十三、Django之添加用户(原始方法实现)

修改urls.py path("user/add/", views.user_add),添加user_add.html {% extends layout.html %} {% block content %}<div class"container"><div class"panel panel-default"><div class"panel-heading"><h3 c…

c语言练习78:执⾏操作后的变量值

字符串函数汇总 1. strlen &#xff1a;计算字符串的⻓度。 2. strcpy &#xff1a;将⼀个字符串复制到另⼀个字符串中。 3. strcat &#xff1a;将⼀个字符串连接到另⼀个字符串的末尾。 4. strcmp &#xff1a;⽐较两个字符串是否相等。 5. strncmp &#xff1a;⽐较两个…

Electron.js入门-构建第一个聊天应用程序

什么是electron 电子是一个开源框架&#xff0c;用于使用web技术构建跨平台桌面应用程序&#xff1b;即&#xff1a; HTML、CSS和JavaScript&#xff1b;被集成为节点模块&#xff0c;我们可以为我们的应用程序使用节点的所有功能&#xff1b;组件&#xff0c;如数据库、Api休…

口袋参谋:深度解析淘人群画像的两种方法!

​一直以来&#xff0c;有不少人问我&#xff0c;关于流量的问题。如若店铺流量不精准会怎么样&#xff1f;这可想而知&#xff0c;不精准的流量会导致店铺销售下降&#xff0c;店铺宝贝的表现力差了&#xff0c;淘宝自然会缩减你的免费流量。 不少新手卖家在开店初期&#xff…

WebGL 响应上下文丢失解决方案

目录 响应上下文丢失 如何响应上下文丢失 上下文事件 示例程序&#xff08;RotatingTriangle_contextLost.js&#xff09; 响应上下文丢失 WebGL使用了计算机的图形硬件&#xff0c;而这部分资源是被操作系统管理&#xff0c;由包括浏览器在内的多个应用程序共享。在某些特…

BIT-5-操作符详解(C语言初阶学习)

1. 各种操作符的介绍。 2. 表达式求值 1. 操作符分类&#xff1a; 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术操作符 - * / % 除了 % 操作符…

【实战】流动的箭头 —— 线性流动组件(repeating-linear-gradient,@keyFrames)

文章目录 一、引子二、组件思路三、效果图四、源代码src\components\flow-arrow\index.jssrc\components\flow-arrow\keyFrames.jssrc\components\flow-arrow\constant.js组件调用 五、拓展学习1.repeating-linear-gradient2.animation3.keyFrames 组件源码获取&#xff1a;⭐️…

docker 安装 logstash

文章目录 Logstash基本语法组成什么是Logstash配置文件&#xff1a;拉去镜像启动镜像 Logstash输入插件&#xff08;input&#xff09;1、标准输入(Stdin)2、读取文件(File) Logstash基本语法组成 什么是Logstash logstash是一个数据抽取工具&#xff0c;将数据从一个地方转移…

Dubbo3应用开发—协议(Dubbo协议、REST协议 、gRPC协议、Triple协议)

协议 协议简介 什么是协议 Client(Consumer端)与Server&#xff08;Provider端&#xff09;在传输数据时双方的约定。 Dubbo3中常见的协议 1.dubbo协议[前面文章中使用的都是dubbo协议] 2.rest协议 3.triple协议 4.grpc协议 5.thirft协议 6.webservice协议 7.rocketmq协议 …

回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测

回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测 目录 回归预测 | MATLAB实现PSO-SVR粒子群优化支持向量机回归多输入单输出预测预测效果基本介绍模型描述程序设计预测效果 <

【Unet系列】

https://tianfeng.space/1947.html 前言概念 图像分割 分割任务就是在原始图像中逐像素的找到你需要的家伙! 语义分割 就是把每个像素都打上标签&#xff08;这个像素点是人&#xff0c;树&#xff0c;背景等&#xff09; &#xff08;语义分割只区分类别&#xff0c;不区…

Android Studio编写xml布局不提示控件的部分属性问题的解决

最近突然发现Android Studio编写xml&#xff0c;发现有一部分控件的属性没有了代码提示&#xff0c;主要体现为id,margin等属性不再有代码提示&#xff0c;如下图。 但是手动输入仍然有效。然后删掉Android Sdk重新回来还是发现有问题&#xff0c;导一个之前的旧项目进来&#…