表的连接【MySQL】

文章目录

  • 什么是连接
  • 测试表
  • 内连接
  • 外连接
    • 左外连接
    • 右外连接
    • 全外连接
  • 自然连接
  • 交叉连接
  • 参考资料

什么是连接

数据库的连接是指在数据库系统中,两个或多个数据表之间建立的关联关系,使它们可以进行数据的交互和操作。连接通常基于某种共同的字段或条件,用于将相关数据组合在一起。

连接操作的对象是表,可以认为是对若干表的笛卡尔积的筛选操作。

连接操作通常分为以下几种:

  1. 内连接(Inner Join):内连接返回两个数据表中满足连接条件的交集部分。只有当连接条件在两个表中都存在匹配时,才会返回结果。
  2. 外连接(Outer Join):外连接返回连接条件满足的结果,以及其中一个表中未匹配到的行。外连接分为左外连接(Left Outer Join)、右外连接(Right Outer Join)和全外连接(Full Outer Join),具体取决于哪个表的所有行都包括在结果中。
  3. 自然连接(Natural Join):自然连接是根据两个表中相同的列名自动进行连接的一种方式。它省略了连接条件,直接使用相同列名进行连接。
  4. 交叉连接(Cross Join):交叉连接返回两个表的笛卡尔积,即其中一个表的每一行都与另一个表的每一行组合,不需要连接条件。

这么分的原因是不同类型的连接操作适用于不同的场景和需求。内连接用于获取两个表中匹配的数据,外连接用于获取匹配以及未匹配的数据,自然连接适用于列名相同的表,而交叉连接则用于获取两个表的所有组合。通过不同类型的连接操作,可以灵活地处理数据表之间的关联关系,满足不同的查询需求。

这四种连接不要死记硬背,试着通过图示理解(下文引用自:数据库表连接的简单解释):

**所谓"连接",就是两张表根据关联字段,组合成一个数据集。**问题是,两张表的关联字段的值往往是不一致的,如果关联字段不匹配,怎么处理?比如,表 A 包含张三和李四,表 B 包含李四和王五,匹配的只有李四这一条记录。

很容易看出,一共有四种处理方法。

  • 只返回两张表匹配的记录,这叫内连接(inner join)。
  • 返回匹配的记录,以及表 A 多余的记录,这叫左连接(left join)。
  • 返回匹配的记录,以及表 B 多余的记录,这叫右连接(right join)。
  • 返回匹配的记录,以及表 A 和表 B 各自的多余记录,这叫全连接(full join)。
img

上图中,表 A 的记录是 123,表 B 的记录是 ABC,颜色表示匹配关系。返回结果中,如果另一张表没有匹配的记录,则用 null 填充。

这四种连接,又可以分成两大类:内连接(inner join)表示只包含匹配的记录,外连接(outer join)表示还包含不匹配的记录。所以,左连接、右连接、全连接都属于外连接。

此外,还存在一种特殊的连接,叫做"交叉连接"(cross join),指的是表 A 和表 B 不存在关联字段,这时表 A(共有 n 条记录)与表 B (共有 m 条记录)连接后,会产生一张包含 n x m 条记录的新表(见下图)。

img

测试表

image-20240223173257335

内连接

内连接(Inner Join):内连接返回两个数据表中满足连接条件的交集部分。只有当连接条件在两个表中存在匹配时,才会返回结果。

SELECT ... FROM t1 INNER JOIN t2 ON 连接条件 [INNER JOIN t3 ON 连接条件] ... AND 其他条件;

注意:内连接的条件通过连接条件指明,用户的其他筛选条件通过其他条件指明。

  • 对上表做内连接。
image-20240223173643272

SQL 的构造顺序是:

  1. 确定要连接的表:A INNER JOIN B
  2. 确定连接表的条件:ON…
  3. 确定其他筛选条件:AND…

注意 SQL 关键字执行的顺序,SELECT 操作的对象是两表的笛卡尔积,所以查询 ID 时要指定任意一个表的 ID,因为笛卡尔积中有两列。

由于 id=2,name=香蕉这条记录在 table2 中没有相同的属性,因此它不会被作为内连接的返回值。

外连接

外连接(Outer Join):外连接返回连接条件满足的结果,以及其中一个表中未匹配到的行。外连接分为左外连接(Left Outer Join)、右外连接(Right Outer Join)和全外连接(Full Outer Join),具体取决于哪个表的所有行都包括在结果中。

左外连接

SELECT ... FROM t1 LEFT JOIN t2 ON 连接条件 [LEFT JOIN t3 ON 连接条件] ... AND 其他条件;
  • 对上表做左外连接。
image-20240223174317091

这意味着即使香蕉没有价格,也会将它的所有信息显示,因为香蕉存在于左表中的记录。其中左表不存在的属性,将会以 NULL 值填充。

右外连接

SELECT ... FROM t1 RIGHT JOIN t2 ON 连接条件 [RIGHT JOIN t3 ON 连接条件] ... AND 其他条件;

在右表中插入一条 ID 不存在于左表的记录:

image-20240223174950933
  • 对上表进行右外连接。
image-20240223175255978

和左外连接类似地,右外连接会将右表存在而左表不存在的记录添加到返回值中,不存在的字段依然用 NULL 值填充。

注意一个细节,在左外连接和右外连接查询 ID 时,指定的表是和连接方向对应的,这也说明了 SELECT 关键字在查找时是按照连接方向进行的。

使用 SELECT * 来获取返回值,结果也是一样的。

全外连接

SELECT ... FROM t1 FULL JOIN t2

全外连接相当于对两个集合做加法,得到的是所有情况。

image-20240223180041495

自然连接

自然连接是一种特殊的连接,它省略了连接条件,直接使用两个表中相同列名进行连接。

SELECT ... FROM t1 NATURAL JOIN t2;
image-20240223180340075

这条 SQL 语句将会自动根据两个表中相同列名进行连接,返回结果中将包含这些相同列名的数据,并且自动过滤掉重复的列。

注意:笛卡尔积是两个表所有可能的行对组合,不考虑任何连接条件。例如,如果表 A 有 M 行,表 B 有 N 行,它们的笛卡尔积将会有 M * N 行。

自然连接避免了笛卡尔积中的大量无关组合,只返回在连接列上值匹配的行,因此结果集通常比笛卡尔积小得多。如果两个表没有列名相同的列,自然连接的结果将是一个空集,而不是笛卡尔积。

交叉连接

交叉连接返回两个表的笛卡尔积,即其中一个表的每一行都与另一个表的每一行组合。

SELECT ... FROM t1 CROSS JOIN t2;
image-20240223180535693

返回 table1 和 table2 的所有可能组合,即 table1 中每一行与 table2 中每一行的组合。

参考资料

  • 数据库表连接的简单解释

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

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

相关文章

力扣每日一题 猜数字游戏 阅读理解

Problem: 299. 猜数字游戏 思路 &#x1f468;‍&#x1f3eb; 灵神 复杂度 Code class Solution {public String getHint(String secret, String guess) {int a 0;int[] cntS new int[10];int[] cntG new int[10];for(int i 0; i < secret.length(); i){if(secre…

Vscode连接外部虚拟环境

如果vscode工程目录里面有一个超级大的虚拟环境文件夹&#xff0c;怎么说都不是一件优雅的事&#xff0c;因此我们希望这个虚拟环境在工程目录外部&#xff0c;我们开始&#xff1a; 1. 复制虚拟环境目录路径&#xff1a;E:\envs\test 2. 在vscode中打开文件夹&#xff0c;CT…

一文详解WebView,不好理解就想想iframe,类比后秒懂了。

Hi&#xff0c;我是贝格前端工场&#xff0c;又到了给大家做技术扫盲的时候&#xff0c;本文讲一讲webview&#xff0c;有些老铁觉得很难懂&#xff0c;其实借助iframe来中转一下&#xff0c;就好理解了。 WebView是一种用于在应用程序中显示Web内容的组件。它可以嵌入到应用程…

【C++】关键字:auto

文章目录 1. 介绍2. 如何使用 1. 介绍 从C11开始&#xff0c;auto变成了类型指示符&#xff08;之前auto并不是这个作用&#xff09;。使用auto定义变量时必须对其进行初始化&#xff0c;在编译阶段编译器自动推导auto变量的实际类型。因此auto并非是一种“类型”的声明&#…

柚见第十期(后端队伍接口详细设计)

创建队伍 用户可以 创建 一个队伍&#xff0c;设置队伍的人数、队伍名称&#xff08;标题&#xff09;、描述、超时时间 P0 队长、剩余的人数 聊天&#xff1f; 公开 或 private 或加密 信息流中不展示已过期的队伍 请求参数是否为空&#xff1f;是否登录&#xff0c;未登录不…

FX110网:在CP Markets申请出金四个多月了,没任何消息!

近期&#xff0c;本站收到一中国汇友投诉&#xff0c;称其CP Markets平台已数月无法出金&#xff0c;平台方也没有任何回应。在货币市场闯荡久了的“老鸟”就会知道&#xff0c;平台无故不给出金必定有妖&#xff0c;更何况还是长达数月&#xff01; 在CP Markets申请出金四个多…

Anaconda下载安装及配置pytorch环境

先解释一下Python、Anaconda、Pytorch是啥 Python是一种广泛使用的编程语言&#xff0c;在许多领域都有应用。它具有简洁的语法&#xff0c;易于学习&#xff0c;并且有大量的第三方库可以使用。 Anaconda是一个Python的包和环境管理软件&#xff0c;提供了许多用于数据科学&a…

51、WEB攻防——通用漏洞验证码识别复用调用找回密码重定向状态值

文章目录 回显状态判断用户名重定向验证码回显显示验证码简单机制验证码复用验证码智能识别验证码接口调用安全修复建议 回显状态判断 request前端判断不安全&#xff08;前端接收验证的返回值来进行判断)&#xff0c;使用burp的Response to this request可以抓取返回包~ 这种…

【JS】APIs:事件流、事件委托、其他事件、页面尺寸、日期对象与节点操作

1 事件流 捕获阶段&#xff1a;从父到子 冒泡阶段&#xff1a;从子到父 1.1 事件捕获 <body> <div class"fa"><div class"son"></div> </div> <script>const fadocument.querySelector(.fa);const sondocument.qu…

机器视觉学习(一)—— 认识OpenCV、安装OpenCV

目录 一、认识OpenCV 二、通过pip工具安装OpenCV 三、PyCharm安装OpenCV 一、认识OpenCV OpenCV&#xff08;Open Source Computer Vision Library&#xff0c;开源计算机视觉库&#xff09;是一个跨平台的计算机视觉库&#xff0c;最初由威尔斯理工学院的Gary Bradski于199…

强烈安利!FastReport 商业图形库,炫酷可视化报告开发首选~

FastReport Business Graphics .NET&#xff0c;是一款基于fastreport报表开发控件的商业图形库&#xff0c;借助 FastReport 商业图形库&#xff0c;您可以可视化不同的分层数据&#xff0c;构建业务图表以进行进一步分析和决策。利用数据呈现领域专家针对 .NET 7、.NET Core、…

NXP iMX8MM Cortex-M4 核心 GPT Capture 测试

By Toradex秦海 1). 简介 NXP i.MX8 系列处理器均为异构多核架构 SoC&#xff0c;除了可以运行 Linux 等复杂操作系统的 Cortax-A 核心&#xff0c;还包含了可以运行实时操作系统比如 FreeRTOS 的 Cortex-M 核心&#xff0c;本文就演示通过 NXP i.MX8MM 处理器集成的 Cortex-…

Node.Js编码注意事项

Node.js 中不能使用 BOM 和 DOM 的 API&#xff0c;可以使用 console 和定时器 APINode.js 中的顶级对象为 global&#xff0c;也可以用 globalThis 访问顶级对象 浏览器端js的组成 Node.js中的JavaScript组成 相比较之下发现只有console与定时器是两个API所共有的&#xff…

HarmonyOS系统开发基础环境搭建

目录 一 鸿蒙介绍&#xff1a; 1.1 HarmonyOS系统 1.2 HarmonyOS软件编程语言 二 HarmonyOS编程环境搭建 1.1 官网下载地址 1.2搭建开发流程 1.3 创建安装目录 1.4 下载DevEco Studio​编辑 1.5 下载后点击安装 1.6 自动添加桌面快捷和bin路径 ​编辑1.7 安装好运行 …

二,几何相交---4,BO算法---(1)接近性和可分离性

提了三个观点 1&#xff0c;如果一条直线&#xff08;比如竖直&#xff09;可以分开两个线段&#xff0c;则这两个线段不相交 2&#xff0c;只需要观察与隔离线相交的几个线段 3&#xff0c;从左向右扫描线只需要观察每个线段的两个端点和一些可能的相交点。

HarmonyOS (一)ArkTS起源及UI框架

目录 1 引言 2 框架 3 ArkUI 4 特点 5 总结 1 引言 Mozilla创造了JS&#xff0c;Microsoft创建了TS&#xff0c;Huawei进一步推出了ArkTS。 ArkTS是HarmonyOS优选的主力应用开发语言。它在TypeScript&#xff08;简称TS&#xff09;的基础上&#xff0c;扩展了声明式UI、…

后悔没有早点看到这份产品说明书模板

产品说明书是连接产品与消费者的桥梁&#xff0c;它对产品具有多重好处。一份设计精良、内容准确的产品说明书有助于消费者全面了解产品&#xff0c;确保用户正确使用产品&#xff1b;减少消费者因误操作导致的故障&#xff0c;降低企业的售后服务成本&#xff1b;增强消费者对…

一文带你深度了解FreeRTOS的任务切换之PendSV异常

RTOS系统的核心是任务管理&#xff0c;而任务管理的核心是任务切换&#xff0c;任务切换决定了任务的执行顺序&#xff0c;任务切换效率的高低也决定了一款系统的性能&#xff0c;尤其是对于实时操作系统。而对于想深入了解 FreeRTOS系统运行过程的同学其任务切换是必须掌握的知…

项目管理软件:如何确保项目启动顺利?

对所有项目经理来说&#xff0c;了解如何启动项目是最关键的技能之一。项目都是从小事开始&#xff0c;逐渐发展为更大型、更复杂的。好的开始是成功的一半&#xff0c;对项目管理来说更是如此。 启动项目的 10 个简单步骤 即使是最复杂的项目&#xff0c;也可以分解成简单的…

爬虫练习:获取某网站的房价信息

一、相关网站 二、相关代码 import requests from lxml import etree import csv with open(房天下数据.csv, w, newline, encodingutf-8) as csvfile:fieldnames [名称, 地点,价格,总价,联系电话]writer csv.DictWriter(csvfile, fieldnamesfieldnames)writer.writeheader…