MySQL的复合查询

在这里插入图片描述

文章目录

  • 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.xdnf.cn/news/149139.html

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

相关文章

哨兵(Sentinel-1、2)数据下载

哨兵(Sentinel-1、2)数据下载 一、登陆欧空局网站 二、检索 先下载2号为光学数据 分为S2A和S2B,产品种类有1C和2A,区别就是2A是做好大气校正的影像,当然数量也会少一些,云量检索条件中记得要按格式&#x…

Mind Map:大语言模型中的知识图谱提示激发思维图10.1+10.2

知识图谱提示激发思维图 摘要介绍相关工作方法第一步:证据图挖掘第二步:证据图聚合第三步:LLM Mind Map推理 实验实验设置医学问答长对话问题使用KG的部分知识生成深入分析 总结 摘要 LLM通常在吸收新知识的能力、generation of hallucinati…

一键AI高清换脸——基于InsightFace、CodeFormer实现高清换脸与验证换脸后效果能否通过人脸比对、人脸识别算法

前言 1、项目简介 AI换脸是指利用基于深度学习和计算机视觉来替换或合成图像或视频中的人脸。可以将一个人的脸替换为另一个人的脸,或者将一个人的表情合成到另一个人的照片或视频中。算法常常被用在娱乐目上,例如在社交媒体上创建有趣的照片或视频,也有用于电影制作、特效…

Qt model/view 理解01

在 Qt 中对数据处理主要有两种方式:1)直接对包含数据的的数据项 item 进行操作,这种方法简单、易操作,现实方式单一的缺点,特别是对于大数据或在不同位置重复出现的数据必须依次对其进行操作,如果现实方式改…

44 二叉搜索树中第K个小的元素

二叉搜索树中第K个小的元素 题解1 中序遍历题解2 AVL(手撕平衡二叉树:谢谢力扣官方) 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数&#xf…

再来介绍另一个binlog文件解析的第三方工具my2sql

看腻了文字就来听听视频演示吧:https://www.bilibili.com/video/BV1rp4y1w74B/ github项目:https://github.com/liuhr/my2sql gitee链接:https://gitee.com/mirrors/my2sql my2sql go版MySQL binlog解析工具,通过解析MySQL bin…

Maven 中引用其他项目jar包出现BOOT-INF问题

问题 在B项目中引入A项目的类,但是发现怎么也引入不进来 A项目打包之后,想在B项目中引用jar 在B项目中发现类文件无法引用 参考网上进行清缓存等一系列操作都没有解决。 最后发现引用的jar包中包含BOOT-INF, 然后去A项目中查找&#xff…

基于回溯搜索优化的BP神经网络(分类应用) - 附代码

基于回溯搜索优化的BP神经网络(分类应用) - 附代码 文章目录 基于回溯搜索优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.回溯搜索优化BP神经网络3.1 BP神经网络参数设置3.2 回溯搜索算法应用 4.测试结果…

基于MFC和OpenCV实现人脸识别

基于MFC和OpenCV实现人脸识别 文章目录 基于MFC和OpenCV实现人脸识别1. 项目说明1. 创建项目2. 启动窗口3. 登录窗口-添加窗口、从启动窗口跳转4. 启动窗口-美化按钮5. 登录窗口-美化按钮、雪花视频6. 注册窗口-美化按钮、雪花视频、从启动窗口跳转7. 注册窗口-开启摄像头8. 注…

大恒IFrameData IImageData转bmp HObject Mat

大恒工业相机采集的帧数据转为其他8bit图像格式 C#转为bmp格式转为Halcon的HObject格式转为OpenCVSharp的Mat格式 回调采集图像的数据类型为IFrameData,单帧采集的数据类型为IImageData,两者的区别为IImageData类多了一个**Destroy()**方法 C# 转为bm…

C++标准模板(STL)- 类型支持 (定宽整数类型)(int8_t,int_fast8_t,int_least8_t,intmax_t,intptr_t)

定宽整数类型 类型 定义于头文件 <cstdint> int8_tint16_tint32_tint64_t (可选) 分别为宽度恰为 8、16、32 和 64 位的有符号整数类型 无填充位并对负值使用补码 &#xff08;仅若实现支持该类型才提供&#xff09; (typedef) int_fast8_tint_fast16_tint_fast32_tint…

第二章 线性表

线性表 线性表的基本概念线性表的顺序存储线性表顺序存储的类型定义线性表基本运算在顺序表上的实现顺序表实现算法的分析 线性表的链接存储单链表的类型定义线性表的基本运算在单链表上的实现 其他运算在单链表上的实现建表删除重复结点 其他链表循环链表双向循环链表 顺序实现…

如何将图片存到数据库(以mysql为例), 使用ORM Bee更加简单

如何将图片存到数据库 1. 创建数据库: 2. 生成Javabean public class ImageExam implements Serializable {private static final long serialVersionUID 1596686274309L;private Integer id;private String name; // private Blob image;private InputStream image; //将In…

【算法练习Day12】树的递归遍历非递归遍历

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 递归遍历前序遍历中序遍历后…

《计算机视觉中的多视图几何》笔记(12)

12 Structure Computation 本章讲述如何在已知基本矩阵 F F F和两幅图像中若干对对应点 x ↔ x ′ x \leftrightarrow x x↔x′的情况下计算三维空间点 X X X的位置。 文章目录 12 Structure Computation12.1 Problem statement12.2 Linear triangulation methods12.3 Geomet…

AndroidStudio精品插件集

官网 项目地址&#xff1a;Github博客地址&#xff1a;Studio 精品插件推荐 使用需知 所有插件在 Android Studio 2022.3.1.18&#xff08;长颈鹿&#xff09;上测试均没有问题&#xff0c;推荐使用此版本Android Studio 2022.3.1.18&#xff08;长颈鹿&#xff09;正式版下…

计算机网络(六):应用层

参考引用 计算机网络微课堂-湖科大教书匠计算机网络&#xff08;第7版&#xff09;-谢希仁 1. 应用层概述 应用层是计算机网络体系结构的最顶层&#xff0c;是设计和建立计算机网络的最终目的&#xff0c;也是计算机网络中发展最快的部分 早期基于文本的应用 (电子邮件、远程登…

【计算机网络】HTTPS协议详解

文章目录 一、HTTPS协议 介绍 1、1 HTTP协议不安全的体现 1、2 什么是 HTTPS协议 二、加密的一些概念 2、1 怎么理解加密 2、2 为什么要加密 2、3 常见的加密方式 2、2、1 对称加密 2、2、2 非对称加密 三、HTTPS协议探究加密过程 3、1 只使用对称加密 3、2 只是用非对称加密 3…

JVM篇---第三篇

系列文章目录 文章目录 系列文章目录一、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?二、Java内存结构三、说说对象分配规则一、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文…

23.3 Bootstrap 框架4

1. 轮播 1.1 轮播样式 在Bootstrap 5中, 创建轮播(Carousel)的相关类名及其介绍: * 1. carousel: 轮播容器的类名, 用于标识一个轮播组件. * 2. slide: 切换图片的过渡和动画效果. * 3. carousel-inner: 轮播项容器的类名, 用于包含轮播项(轮播图底下椭圆点, 轮播的过程可以显…