MySQL:联合查询

目录

一、笛卡尔积

​二、内连接 

三、外连接

(1)左外连接

(2)右外连接

(3)全外连接

四、自连接

五、子查询 

(1)单行子查询

(2)多行子查询

(3)多列子查询

(4)临时表

六、合并查询 

(1)union

(2)union all


  在上一篇文章中我们引入了范式,而在数据设计时由于范式的要求,我们的数据被拆分到多个表中,而此时我们要查询一条完整的数据信息,就要从多个表中获取数据。

  例如我们将下面这张原本的表进行了拆分:

  拆分成学生表,课程表,成绩表:

 

  而当这样拆分后,我们我们无法按照之前的方式进行查询了,因为了能够进行跨表查询,我们就引入了联合查询

一、笛卡尔积

  在我们进行多表查询的时候我们需要用到一个方式:取笛卡尔积

select * from 表1 别名,表2 别名;

  那么我们接下来就对我们的学生表和班级表取笛卡尔积

  我们发现取笛卡尔积后其实是有很多的无效数据的,因为我们的学生表中的课程id是要和课程表中的id相同才是有效的,因此我们要进行筛选

  这样我们就得到了我们想要的信息了

   当然如果我们还要进一步的筛选,我们只需要加上and 和我们的筛选条件即可

 二、内连接 

语法:

select 字段 from 表 1 别名 1, 表 2 别名 2 where 连接条件 and 其他条件 ;

select 字段 from 表 1 别名 1 [inner] join 表 2 别名 2 on 连接条件 where 其他条件 ;

  我们的内连接是有两种写法的,那么我们接下来就用两种方式去得到我们所有学生的信息和他们的成绩

  接下来我们也来做个练习利用内连接,查询名字为张三的总成绩 

三、外连接

  我们的外连接分为左外连接、右外连接和全外连接三种类型。

  注意:MySQL不支持全外连接

(1)左外连接

语法:

select 字段名 from 表名 1 left join 表名 2 on 连接条件 ;

注意:左外连接会返回左表的所有记录和右表中匹配的记录。如果右表中没有匹配的记录,则结果集中对应字段会显示为NULL。

  那么接下来我们利用左外连接去查询学生表和成绩表的有效信息

   如果此时我们在学生表中添加一位没有参加考试的学生信息,在进行查询将会怎样呢?

  我们发现如果我们使用左外连接进行查询如果我们有没参加考试,他会将我们的表1的信息全部显示,而表2的信息后全部显示为null.

(2)右外连接

语法:

select 字段名 from 表名 1 right join 表名 2 on 连接条件 ;

注意:右外连接是与左外连接相反,返回右表的所有记录和左表中匹配的记录。如果左表中没有匹配的记 录,则结果集中对应字段会显示为NULL。

  接下来我们利用右外连接来查询学生表和班级表之间的关系

   这时如果我们在班级表中新添加一个班级,并且没有学生在这个班级里会怎样呢?

  我们发现如果我们使用右外连接进行查询如果我们有没有学生的班级,他会将我们的表2的信息全部显示,而表1的信息后全部显示为null.

(3)全外连接

  结合了左外连接和右外连接的特点,返回左右表中的所有记录。如果某一边表中没有匹配的记录,则结果集中对应字段会显示为NULL。

由于我们的MySQL不支持全外连接,我们就不做演示了

四、自连接

  所谓自连接就是自己与自己取笛卡尔积,可以把行转化成列,而我们在进行查询的时候可以使用where条件对结果进行过滤,或者说实现行与行之间的比较。

  注意:在做表连接时,我们需要为进行自连接表起不同的别名。

  而利用这种方式我们就可以利用自连接的方式,去得到同一个表中java成绩大于MySQL成绩的信息。

 五、子查询 

  定义:我们的子查询又叫嵌套查询,它是根据把一个SELECT语句的结果当做别一个SELECT语句的条件,来进行查询的方式

语法:

select * from table1 where col_name1 {= | IN} ( select col_name1 from table2 where col_name2 {= | IN} [( select ...) ] ... );

  而我们的子查询却又分成三种查询模式:单行子查询,多行子查询,多列子查询

(1)单行子查询

  简单来说就是嵌套的查询中只返回一行数据

  例如:我们想要查询与"不想毕业"同学的同班同学

  像这样,一个查询的条件时另一个查询的结果,就是我们的子查询,而由于另一个查询的结果是一行数据,那么我们就称它是单行子查询。

(2)多行子查询

  嵌套的查询中返回多行数据,但是我们需要使用[NOT] IN关键字得到返回的范围

  例如:我们想要查询"MySQL"或"Java"课程的成绩信息

  像这样,一个查询的条件时另一个查询的多个结果,而我们用in关键字去存入这些结果,再根据这些in中的条件去得到另一个查询的结果,我们就称它是多行子查询。

(3)多列子查询

  单行子查询和多行子查询都只返回一列数据,多列子查询中可以返回多个列的数据

  注意:外层查询与嵌套的内层查询的列要匹配

  我们举个简单的例子:根据多列子查询去得到成绩中的所有列(虽然这么查询没必要,但是注意是好了解多列子查询)

  然而除了这三种子查询方式,我们还有一种方式,通过临时表在from中进行查询 

(4)临时表

  当一个查询产生结果时,MySQL自动创建一个临时表,然后把结果集放在这个临时表中,最终返回给用户,在from子句中也可以使用临时表进行子查询或表连接操作

  例如:我们要查询所有比"Java班"平均分高的成绩信息

  在原本的思路中我们是要先查出"Java班"平均分,然后根据这个平均分作为条件,进行筛选比平均分高的成绩信息。

  但是在这里,我们其实可以利用子查询的方式,将这个求平均分的方式的临时表,通过调用临时表中列的值的方式求出所有比"Java班"平均分高的成绩信息

六、合并查询 

  在实际应用中,在我们进行两表的select操作返回的结果,肯会有多个相同的结果,而在这种情况下我们就可以使用集合操作符union,union all,来确定是否进行去重

  首先我们根据student表的形态再创建一个相同的表student1,同时进行数据的插入

(1)union

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

在这里我们会将student1中张三这一重复行的数据进行去重

(2)union all

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

  在这里我们会将student1中张三这一重复行的数据也显示在结果中。 


  好了今天的分享就到这里了,还请大家多多关注,我们下一篇见!

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

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

相关文章

深入理解 Cortex-M3 的内核寄存器组

每个 MCU 开发工程师一定都了解寄存器这个东西,以 STM32 为例,其拥有非常多的外设模块,如串口、SPI、IIC 等等,如果要使用这些外设,使其按照我们的要求工作,就需要配置这些外设的寄存器,往这些寄…

网络安全自动化:找准边界才能筑牢安全防线

数字时代,企业每天要面对成千上万的网络攻击。面对庞大的服务器群、分散的团队和长期不重启的设备,很多企业开始思考:哪些安全操作适合交给机器自动处理?哪些必须由人工把关?今天我们就用大白话聊聊这件事。 一、这些事…

C++负载均衡远程调用学习之负载均衡算法与实现

目录 01 lars 系统架构回顾 02 lars-lbAgentV0.4-route_lb处理report业务流程 03 lars-lbAgentV0.4-负责均衡判断参数配置 04 lars-lbAgentV0.4-负载均衡idle节点的失败率判断 05 lars-lbAgentV0.4-负载均衡overload节点的成功率判断 06 lars-lbAgentV0.4-负载均衡上报提交…

领略算法真谛: 多源bfs

嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…

雷电模拟器-超好用的Windows安卓模拟器

一、雷电模拟器介绍 雷电模拟器是一款功能强大的软件,它能够在电脑上模拟出安卓手机系统,让你可以在电脑上运行各类手机应用及游戏。其采用虚拟安卓手机操作界面,为玩家带来了独特的体验。 (一)强大的兼容性 雷电模拟…

文章三《机器学习基础概念与框架实践》

文章3:机器学习基础概念与框架实践 ——从理论到代码,用Scikit-learn构建你的第一个分类模型 一、机器学习基础理论:三大核心类型 机器学习是人工智能的核心,通过数据让计算机自动学习规律并做出预测或决策。根据学习方式,可分为三类: 1. 监督学习(Supervised Learni…

脑机接口技术:开启人类与机器的全新交互时代

在科技飞速发展的今天,人类与机器的交互方式正经历着前所未有的变革。从最初的键盘鼠标,到触摸屏,再到语音控制,每一次交互方式的升级都极大地提升了用户体验和效率。如今,脑机接口(Brain-Computer Interfa…

8.2 GitHub企业级PDF报告生成实战:ReportLab高级技巧与性能优化全解析

GitHub企业级PDF报告生成实战:ReportLab高级技巧与性能优化全解析 GitHub Sentinel 高级功能实现:PDF 报告生成技术详解 关键词:PDF 报告生成, ReportLab 实战, 结构化数据转换, 容器化字体配置, 企业级报告模板 1. 需求分析与技术选型 PDF 报告生成需要满足以下技术要求…

架构思维:构建高并发读服务_基于流量回放实现读服务的自动化测试回归方案

文章目录 引言一、升级读服务架构,为什么需要自动化测试?二、自动化回归测试系统:整体架构概览三、日志收集1. 拦截方式2. 存储与优化策略3. 架构进化 四、数据回放技术实现关键能力 五、差异对比对比方式灵活配置 六、三种回放模式详解1. 离…

基于Spring Boot 3.0、ShardingSphere、PostgreSQL或达梦数据库的分库分表

要实现基于Spring Boot 3.0、ShardingSphere、PostgreSQL或达梦数据库的分库分表,首先需要对ShardingSphere进行一些基本配置。你提到的溯源码、批次号等数据需要考虑到跨年数据的存储,因此要设计一个能够动态扩展的分表策略 添加ShardingSphere依赖 在…

位运算的应用

1. 判断偶数&#xff0c;判断最低位是0还是1即可&#xff0c;⽐求模快 x % 2 ! 0 //x正负都可以判断&#xff1b;不⽤x%2 1&#xff0c;因为如果x为负奇数&#xff0c;x%2-1 (x & 0x1) 0 例如&#xff1a; int x; int main() { cin>>x; if((x & 0x1)0) cout<…

FOC算法开环控制基础

1. 为什么要有FOC算法 先看看从有刷电机到无刷电机的简单介绍&#xff0c;如下图1&#xff0c;通电螺线圈会产生磁场&#xff0c;这个磁场会产生N级和S级&#xff0c;然后这个电磁铁就可以吸引永磁体&#xff0c;S级吸引N级&#xff0c;N级吸引S级&#xff0c;通俗的来说&…

【计算机网络】HTTP中GET和POST的区别是什么?

从以下几个方面去说明&#xff1a; 1.定义 2.参数传递方式 3.安全性 4.幂等性 1.定义&#xff1a; GET&#xff1a; 获取资源&#xff0c;通常请求数据而不改变服务器的状态。POST&#xff1a; 提交数据到服务器&#xff0c;通常会改变服务器的状态或副作用(如创建或更新资源…

7400MB/s5050TBW完美结合,全新希捷酷玩530R SSD体验评测

7400MB/s&5050TBW完美结合&#xff0c;全新希捷酷玩530R SSD体验评测 哈喽小伙伴们好&#xff0c;我是Stark-C~ 说到希捷酷玩530 SSD&#xff0c;很多硬核进阶玩家应该都知道&#xff0c;或者说正在使用&#xff08;比如说我~&#xff09;。 作为希捷大厂旗下高性能SSD的…

(undone) MIT6.S081 2023 学习笔记 (Day11: LAB10 mmap)

url: https://pdos.csail.mit.edu/6.1810/2023/labs/mmap.html mmap和munmap系统调用允许UNIX程序对其地址空间进行精细控制。它们可用于进程间共享内存、将文件映射到进程地址空间&#xff0c;并作为用户级页面错误处理方案的一部分&#xff0c;例如课程中讨论的垃圾回收算法。…

Q_OBJECT宏的作用

Qt 中&#xff0c;如果一个类中定义了信号&#xff08;signals&#xff09;或槽&#xff08;slots&#xff09;&#xff0c;那么这个类必须包含 Q_OBJECT 宏。 Q_OBJECT宏是 Qt 元对象系统的核心部分&#xff0c;它使得信号和槽机制能够正常工作。 Q_OBJECT宏是 Qt 的元对象系统…

信息安全基石:加解密技术的原理、应用与未来

信息加解密技术是信息安全领域的核心技术之一&#xff0c;以下为你详细介绍&#xff1a; 一、加密技术 1.定义&#xff1a;加密是通过特定的算法和密钥&#xff0c;将原始的明文信息转化为看似无意义的密文信息的过程。这一过程使得信息在传输、存储等过程中&#xff0c;即使…

LeetCode:返回倒数第k个结点

1、题目描述 实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回该节点的值。 注意&#xff1a;本题相对原题稍作改动 示例&#xff1a; 输入&#xff1a; 1->2->3->4->5 和 k 2 输出&#xff1a; 4 说明&#xff1a; 给定的 k 保证是有效的。 2、…

R004 -计算机硬件基础

目录 1.数据表示&计算机网络组成 2.计算机网络分类 3.冯诺依曼体系结构 4.指令系统基础 5.指令系统类型 6.流水线技术 流水线周期 &#xff1a;各流水段中&#xff0c;执行时间最长的那一段。就是T 流水线时间&#xff1a;t 1t2t 3 (n-1) * T 7.流水线指标 8.存储系…

Mybatis学习(下)

目录 1. 动态sql的应用 1.2 1.2 1.3 、 、 标签 1.4 1. 动态sql的应用 使用Mybatis框架时, 对于sql数据的操作量比较大的时候, 看着会觉得很乱, 可能写着写着就乱了, 或者说回过头来发现sql语句写错了, 很麻烦, 所以动态sql就可以让我们用Java代码, 替换部分sql语句 1.2 &l…