<MySQL> 查询数据进阶操作 -- 联合查询
目录
一、什么是笛卡尔积?
二、什么是联合查询?
三、内连接
3.1 简介
3.2 语法
3.3 更多的表
3.4 操作演示
四、外连接
4.1 简介
4.2 语法
4.3 操作演示
五、自连接
5.1 简介
5.2 自连接非必要不使用
六、子查询(嵌套查询)
6.1 简介
6.2 in 和 exists 关键字
6.3 子查询可能让简单的语句变复杂
七、合并查询
7.1 简介
7.2 合并查询可能让简单的语句变复杂
八、MySQL 中各个关键字的执行顺序
一、什么是笛卡尔积?
笛卡尔积(Cartesian product)是一种数学概念,用于描述两个或多个集合之间的组合。它表示为两个或多个集合的乘积,其中每个元素都来自不同的集合。
在编程中,笛卡尔积通常用于描述两个或多个数据集合之间的组合。

编程中使用笛卡尔积,需要注意以下两点:
| 实际开发中,使用笛卡尔积需要慎重,需要预估笛卡尔积后的结果集的规模,避免规模过大。 |
| 通常表与表之间存在关联关系,才可以进行笛卡尔积。没有关联关系的数据得出的笛卡尔积,通常也没有意义。 |
二、什么是联合查询?
在MySQL中,联合查询是一种查询多个表的多个列的查询,通过取笛卡尔积,这些表和列被组合成一个结果集。联合查询通常用于查询多个表之间的关联数据。
联合查询的常见方式包括:内连接、外连接、自连接、子查询(嵌套查询)、合并查询。
三、内连接
3.1 简介
内连接是查询两个表或多个表之间的关联数据,返回两个表之间的交集数据。内连接是默认的连接类型,如果不指定连接类型,那么查询默认为内连接。

3.2 语法
| 基本语法: | select * from 表1 join 表2 on 关联条件; |
| 基本语法: | select * from 表1,表2 where 关联条件; |
| 释义: | 根据关联条件,全列查询指定表的笛卡尔积。 以上两种写法效果一致。 可以指定别名。 |
以上语法只进行了基本的查询,后续往往需要根据需要根据需求对表的内容进行精简。
查询和精简步骤:
| 1、进行笛卡尔积 |
| 2、指定表之间的关联条件 |
| 3、指定结果集的筛选条件 |
| 4、指定需要打印的列(对需要打印的列进行精简或聚合运算) |
| join on 语法: | select 需要打印的列名... from 表1 join 表2 on 关联条件 and 结果集的其他筛选条件; |
| where语法: | select 需要打印的列名... from 表1,表2 where 关联条件 and 结果集的其他筛选条件; |
3.3 更多的表
在超过两个表做笛卡尔积时,两种语法分别是怎样添加对应语句的?
假设此时有三个表做笛卡尔积:
| join on 语法: | select 需要打印的列名... from 表1 join 表2 on 关联条件 join 表3 on 关联条件 and 结果集的其他筛选条件; |
| where 语法: | select 需要打印的列名... from 表1,表2,表3 where 关联条件,关联条件 and 结果集的其他筛选条件; |
第一种写法清晰地表达了表之间是什么关联条件;而第二种写法则更为简洁,但表之间的关联条件却写成一团;两种写法各有各的优点。
3.4 操作演示

四、外连接
4.1 简介
外连接也是查询两个表之间的关联数据,但有所不同的是,内连接查询的是两个表的交集,而外连接则会以一侧的表为主,显示所有列。

4.2 语法
外连接需要使用 left join 或 right join 子句指定连接方向。使用 left join 表示完全显示左侧表,称为左外连接;使用 right join 表示完全显示右侧表,称为右外连接。
| 语法: | select 需要打印的列名... from 表1 left join 表2 on 关联条件 and 结果集的其他筛选条件; |
| 释义: | 根据关联条件和结果集的其他筛选条件,以指定的左侧表为主,查询指定表中指定的列数据。 |
4.3 操作演示

五、自连接
5.1 简介
自连接是指一个表和自己进行笛卡尔积,这种查询方式应用场景不多,在需要将行关系转化成列关系时可以使用。
| 语法: | select * from 表名 as 别名1,表名 as 别名2; |
| 释义: | 指定一个表和自己进行笛卡尔积,并打印结果集。 由于在同一个语句中表名相同,因此自连接需要使用别名。 |
没有使用别名将报错:

5.2 自连接非必要不使用
假设有以下场景:

从上图可知,除了行列关系不同,使用其他方法可以和自连接获得一样的数据,但是自连接还需要对数据进行笛卡尔积,查询开销大。因此,自连接的查询方式并不常用。如果出现一定要使用自连接进行查询才能获得正确数据的情况,此时则应考虑表的设计是否存在缺陷。
六、子查询(嵌套查询)
6.1 简介
子查询是嵌套在主查询内部的SQL查询,它返回一个结果集,然后被用作主查询的条件。子查询需要使用where子句,并将其放在主查询的括号内。
| 语法: | 主查询语句 where 包含(子查询语句)的条件表达式; |
| 释义: | 使用子查询语句返回的结果集作为主查询语句的条件。 |
6.2 in 和 exists 关键字
子查询语句可以配合 in 和 exists 关键字使用。
| 关键字 | 释义 |
| in / exists | 包含在(子查询语句返回的结果集中) |
| not in / not exists | 不包含在(子查询语句返回的结果集中) |
6.3 子查询可能让简单的语句变复杂

七、合并查询
7.1 简介
合并查询用于查询多个表的多个列的查询,这些表和列将被组合成一个结果集。在前后查询的结果集中,列的类型和数量需要一致,列名则不需要一致。
合并查询需要使用 union 或 union all 关键字。
| 关键字 | 说明 |
| union | 取得两个结果集的并集,去重 |
| union all | 取得两个结果集的并集,不去重 |
| 语法: | 查询语句1 union 查询语句2; |
| 释义: | 将两个查询的结果集合并,去重,打印。 |
7.2 合并查询可能让简单的语句变复杂

八、MySQL 中各个关键字的执行顺序
| from | on | join | where | group by | with | having | select | distinct | order by | limit |
| >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> | ||||||||||
关键字从左到右,优先级依次从高到低。优先级高的关键字先执行。
阅读指针 -> 《数据库中的索引是什么?》
链接生成中...........
相关文章:
<MySQL> 查询数据进阶操作 -- 联合查询
目录 一、什么是笛卡尔积? 二、什么是联合查询? 三、内连接 3.1 简介 3.2 语法 3.3 更多的表 3.4 操作演示 四、外连接 4.1 简介 4.2 语法 4.3 操作演示 五、自连接 5.1 简介 5.2 自连接非必要不使用 六、子查询(嵌套查询) 6.1 简介 6.…...
centos 6.10 安装 svn1.14.2
安装 apr 和 apr-util 下载地址 我下载的分别是 apr-1.7.4 和 apr-unit-1.6.3 常规的安装步骤 ./configure --prefix/usr/local/xxx make && make install注意要先安装 apr 再安装 apr-unit-1.6.3 安装 lz4 下载地址 要配置好环境变量,不然可能还是找…...
Java实现俄罗斯方块
规则 1.方块会从上方缓慢下落,玩家可以通过键盘上的上下左右键来控制方块。 2.方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的方块出现在区域上方开始落下。 3.当区域中某一列横向格子全部由方块填满,…...
【计算思维】少儿编程蓝桥杯青少组计算思维题考试真题及解析B
STEMA考试-计算思维-U8级(样题) 1.浩浩的左⼿边是( )。 A.兰兰 B.⻉⻉ C.⻘⻘ D.浩浩 2.2时30分,钟⾯上时针和分针形成的⻆是什么⻆?( ) A.钝⻆ B.锐⻆ C.直⻆ D.平⻆ 3.下⾯是⼀年级同学最喜欢的《⻄游记》…...
第三章 栈和队列【24王道数据结构笔记】
1.栈 1.1 栈的基本概念 只允许在一端(栈顶top)进行插入或删除操作的受限的线性表。后进先出(Last In First Out)LIFO。或者说先进后出FILO。 进栈顺序:a1 > a2 > a3 > a4 > a5出栈顺序:a5 > a4 > a3 > a2 …...
保姆级教程之SABO-VMD-CNN-SVM的分类诊断,特征可视化
今天出一期基于SABO-VMD-CNN-SVM的分类诊断。 依旧是采用经典的西储大学轴承数据。基本流程如下: 首先是以最小包络熵为适应度函数,采用SABO优化VMD的两个参数。其次对每种状态的数据进行特征向量的求取,并为每组数据打上标签。然后将数据送入…...
跳跃游戏(贪心思想)
题解 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 输入样例 示例 1…...
【JavaSE语法】类和对象(二)
六、 封装 6.1 封装的概念 面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。 封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互…...
【SA8295P 源码分析 (三)】121 - MAX9295A 加串器芯片手册分析 及初始化参数分析
【SA8295P 源码分析】121 - MAX9295A 加串器芯片手册分析 及初始化参数分析 一、MAX9295A 芯片特性1.1 GPIO 引脚说明1.2 功能模块框图1.3 时序分析1.3.1 GMSL2 Lock Time:25 ms1.3.2 视频初始化延时:1.1ms + 17000 x t(PCLK)1.3.3 High-Speed Data Transmission in Bursts1.…...
Maya 2024 for Mac(3D建模软件)
Maya 2024是一款三维计算机图形软件,具有强大的建模、动画、渲染、特效等功能,广泛应用于影视、游戏、广告等行业。以下是Maya 2024软件的主要功能介绍: 建模:Maya 2024具有强大的建模工具,包括多边形建模、曲面建模、…...
9. 深度学习——GAN
机器学习面试题汇总与解析——GAN 本章讲解知识点 从 GAN 讲起本专栏适合于Python已经入门的学生或人士,有一定的编程基础。本专栏适合于算法工程师、机器学习、图像处理求职的学生或人士。本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。这才是一份面试题总结的正…...
BeanUtils中的copyProperties方法使用
一、Beanutils中的copyProperties是我们在日常开发中常用的一个方法。 作用: 将a实体类中的属性赋值到b实体类中相对于的字段上 1.我们前端传参的时候我们后端通常会用vo实体类来接收,但是更新数据库的时候需要用do去操作 2.我们将vo的属性copy到do中可…...
hivesql连续日期统计最大逾期/未逾期案例
1、虚表(测试表和数据) create test_table as select a.cust_no, a.r_date, a.yqts from ( select 123 as cust_no, 20231101 as r_date, 0 as yqts union all select 123 as cust_no, 20231102 as r_date, 1 as yqts union all select 123 as cust_no, 20231103 as r_d…...
基于STM32的无线通信系统设计与实现
【引言】 随着物联网的迅速发展,无线通信技术逐渐成为现代通信领域的关键技术之一。STM32作为一款广受欢迎的微控制器,具有丰富的外设资源和强大的计算能力,在无线通信系统设计中具有广泛的应用。本文将介绍如何基于STM32实现一个简单的无线通…...
kubernetes--pod详解
目录 一、pod简介: 1. Pod基础概念: 2. Kubrenetes集群中Pod的两种使用方式: 3. pod资源中包含的容器: 4. pause容器的两个核心功能: 5. Kubernetes中使用pause容器概念的用意: 二、pod的分类࿱…...
WPF提供了哪些不同类型的画刷
在WPF中,画刷(Brush)用于填充图形对象(如形状、控件的背景和前景)的颜色和样式。WPF提供了几种不同类型的画刷: SolidColorBrush:这是最简单的画刷,它提供了一个单一的、固定的颜色。…...
STM32与ZigBee技术在智能家居无线通信中的应用研究
一、引言 智能家居系统是利用物联网技术将家庭各种设备进行互联互通,实现智能化控制和管理的系统。在智能家居系统中,无线通信技术起着至关重要的作用,而STM32微控制器和ZigBee技术则是实现智能家居无线通信的关键技术。本文将对STM32与ZigB…...
【Apache Doris】审计日志插件 | 快速体验
【Apache Doris】审计日志插件 | 快速体验 一、 环境信息1.1 硬件信息1.2 软件信息 二、 审计日志插件介绍三、 快速 体验3.1 AuditLoader 配置3.1.1 下载 Audit Loader 插件3.1.2 解压安装包3.1.3 修改 plugin.conf 3.2 创建库表3.3 初始化3.4 验证 一、 环境信息 1.1 硬件信…...
Web安全:Vulfocus 靶场搭建.(漏洞集成平台)
Web安全:Vulfocus 靶场搭建.(漏洞集成平台) Vulfocus 是一个包含了多种漏洞靶场的镜像。每个靶场都有具体的漏洞环境和攻击点。Vulfocus 的靶场包括了 Web 安全漏洞、系统安全漏洞、网络安全漏洞、密码学漏洞等多种类型。通关这个靶场我们可以…...
Go ZIP压缩文件读写操作
创建zip文件 golang提供了archive/zip包来处理zip压缩文件,下面通过一个简单的示例来展示golang如何创建zip压缩文件: func createZip(filename string) {// 缓存压缩文件内容buf : new(bytes.Buffer)// 创建zipwriter : zip.NewWriter(buf)defer writ…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
