MySQL:七种 SQL JOINS 的实现(图文详解)

MySQL:7种SQL JOINS的实现

  • 前言
  • 一、图示表示
  • 二、代码举例
    • 1、INNER JOIN(内连接)
    • 2、LEFT JOIN(左连接)
    • 3、RIGHT JOIN(右连接)
    • 4、OUTER JOIN(全连接)
    • 5、LEFT EXCLUDING JOIN(左排除连接)
    • 6、RIGHT EXCLUDING JOIN(右排除连接)
    • 7、OUTER EXCLUDING JOIN(外部排除连接)
  • 三、注意事项



前言

本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!

一、图示表示

在这里插入图片描述

二、代码举例

在SQL中,常用的有七种JOIN操作,分别是:

1、INNER JOIN(内连接)

内连接返回两个表中匹配的行。实现方式可以是使用等值连接(ON条件),或者使用隐式的交叉连接(WHERE条件)。

在这里插入图片描述

SELECT <select_list>
FROM Table_A A
INNER JOIN Table_B B
ON A.Key = B.Key

2、LEFT JOIN(左连接)

左连接返回左表中的所有行,以及右表中与左表匹配的行。如果右表中没有匹配的行,则返回NULL值。

在这里插入图片描述

SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key

3、RIGHT JOIN(右连接)

右连接返回右表中的所有行,以及左表中与右表匹配的行。如果左表中没有匹配的行,则返回NULL值。

在这里插入图片描述

SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key

4、OUTER JOIN(全连接)

全连接返回左表和右表中的所有行,如果左表或右表中没有匹配的行,则返回NULL值。

在这里插入图片描述

SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key

5、LEFT EXCLUDING JOIN(左排除连接)

左排除连接返回左表中没有在右表中找到匹配的行。它只返回左表中没有与右表匹配的行,而右表中匹配的行将被排除在结果集之外。

在这里插入图片描述

SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL

6、RIGHT EXCLUDING JOIN(右排除连接)

右排除连接返回右表中没有在左表中找到匹配的行。它只返回右表中没有与左表匹配的行,而左表中匹配的行将被排除在结果集之外。

在这里插入图片描述

SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL

7、OUTER EXCLUDING JOIN(外部排除连接)

外部排除连接是左排除连接和右排除连接的结合,返回左表和右表中没有匹配的行。它返回左表和右表中没有与对方表匹配的行,而匹配的行将被排除在结果集之外。

在这里插入图片描述

SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL OR B.Key IS NULL

这些 JOIN 类型提供了不同的数据关联方式,可根据具体需求选择适当的 JOIN 类型来获得所需的查询结果。请注意,具体的 JOIN 语法可能会因数据库管理系统而有所不同,但概念和原则是相似的。

三、注意事项

在使用 SQL JOINs 进行表连接时,以下是一些需要注意的重要点:

  1. 我们要控制连接表的数量。多表连接就相当于嵌套 for 循环一样,非常消耗资源,会让 SQL 查询性能下降得很严重,因此不要连接不必要的表。在许多 DBMS 中,也都会有最大连接表的限制。

【强制】超过三个表禁止 join。需要 join 的字段,数据类型保持绝对一致;多表关联查询时, 保证被关联的字段需要有索引。
说明:即使双表 join 也要注意表索引、SQL 性能。
来源:阿里巴巴《Java开发手册》

  1. 连接条件:确保连接条件准确无误。连接条件是指在 ON 子句中指定的列或表达式,用于确定两个表之间的关联关系。错误的连接条件可能导致错误的结果或不完整的数据。
  2. 表别名:使用表别名可以提高 SQL 查询的可读性。通过为每个表指定别名,可以简化查询并避免列名冲突。
  3. 数据冗余:当进行 JOIN 操作时,结果集可能会包含冗余的数据,尤其是在多对多关系的情况下。需要谨慎处理冗余数据,并在需要时使用 DISTINCT 关键字来消除重复行。
  4. 性能影响:JOIN 操作可能对数据库性能产生影响,特别是在连接大型表或复杂查询时。确保表中的连接列上有适当的索引,以提高查询性能。
  5. JOIN 类型选择:选择适当的 JOIN 类型非常重要,以确保获取所需的数据。了解每个 JOIN 类型的含义和适用场景,并根据具体需求进行选择。
  6. 多个 JOIN 操作:在某些情况下,可能需要多个 JOIN 操作来连接多个表。确保 JOIN 操作的顺序和连接条件的正确性,以获得正确的结果。
  7. 使用其他查询条件:可以在 JOIN 操作中使用其他查询条件,如 WHERE 子句或 HAVING 子句,来进一步筛选所需的数据。
  8. 外连接 NULL 值处理:在使用外连接(LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN)时,需要注意处理 NULL 值。确保代码中正确处理可能出现的 NULL 值情况。
  9. 自连接的别名:在使用自连接时,使用不同的表别名来区分自连接的两个表是非常重要的,否则会导致冲突和错误的结果。
  10. 数据一致性:在进行 JOIN 操作之前,确保参与连接的表之间具有一致的数据类型和数据结构,以避免数据不匹配的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nbcio-vue中formdesigner的组件显示不正常的处理

今天看演示系统的formdesigner组件显示不正常&#xff0c;也不知道是什么时候开始的事情&#xff0c; 如下&#xff1a; 对组件的操作倒是正常&#xff0c;但看本地是正常的&#xff0c;如下&#xff1a; 开始也不知道是什么原因&#xff0c;看代码也是一样的&#xff0c;应该…

JavaScript 中内存泄漏的几种情况?

一、是什么 内存泄漏&#xff08;Memory leak&#xff09;是在计算机科学中&#xff0c;由于疏忽或错误造成程序未能释放已经不再使用的内存 并非指内存在物理上的消失&#xff0c;而是应用程序分配某段内存后&#xff0c;由于设计错误&#xff0c;导致在释放该段内存之前就失…

Hidl编程实战(一)——定义HAL服务

1. 概述 hidl基本知识可以参考官网 安卓官网-hidl 也讲解了C和Java实现hidl 本文讲解CHal服务的创建 2. 文件的创建 aosp整编过的代码&#xff0c;可以直接choosecombo后使用hidl-gen工具。如果没有整编过&#xff0c;可以单编hidl-gen工具。 hidl-gen工具可以用来协助创建h…

Windows和Linux动态注入

摘要&#xff1a;最近对动态注入有一些兴趣因此搜索了些资料&#xff0c;简单整理了下相关的技术实现。本文只能够带你理解何如注入以及大概如何实现&#xff0c;对注入的方法描述的并不详细。   关键字&#xff1a;dll注入&#xff0c;hook&#xff0c;提权   读者须知&am…

基于Springboot+Vue的校园招聘系统(进阶版)

本项目是一年前写的一个项目的升级版&#xff0c;因为某些原因将它作了一个升级改进&#xff0c; 好多兄弟来问有没有演示&#xff0c;现在先来写个说明&#xff01;&#xff01;&#xff01; 目录 一. &#x1f981; 前言二. &#x1f981; 开源代码与组件使用情况说明三. &am…

Qt之事件过滤器讲解并且实现快捷键切换鼠标焦点

目录 1、需求背景2、使用Qt键盘事件3、安装事件过滤器4、事件处理级别 1、需求背景 现在有一个类似于下方图的ui&#xff0c;用户需要在输入前一行内容后&#xff0c;需要摁下指定案件能够跳转到下一行继续进行输入。 2、使用Qt键盘事件 一种更为直接的解决方案是子类化QLi…

如何在 Linux 中安装、设置和使用 SNMP?

概要 SNMP&#xff08;Simple Network Management Protocol&#xff09;是一种用于管理和监控网络设备的协议。它允许网络管理员通过远程方式收集设备的运行状态、性能数据和错误信息&#xff0c;以便进行故障排除和网络优化。在Linux系统中&#xff0c;我们可以安装、设置和使…

IDEA配置本地Maven详细教程

IDEA配置本地Maven详细教程 一、下载二、安装三、配置环境变量四、IDEA配置Maven 一、下载 官网下载&#xff1a;点击下载 网盘下载&#xff1a;点击下载 二、安装 将下载后的zip文件&#xff08;免安装版&#xff09;解压到自己想要放的位置&#xff0c;&#xff0c;我这里…

对MVVM和MVC开发模式的理解

对MVVM和MVC开发模式的理解 1、MVVM2、MVC3、MVVM与MVC的区别 1、MVVM MVVM最早由微软提出来&#xff0c;它借鉴了桌面应用程序的MVC思想&#xff0c;在前端页面中&#xff0c;把Model用纯JavaScript对象表示&#xff0c;View负责显示&#xff0c;两者做到了最大限度的分离&am…

UE4/5 通过Control rig的FullBody【蜘蛛模型,不用basic ik】

目录 根设置 FullBody IK 额外骨设置 ​编辑 晃动效果 根设置 第一步你需要准备一个蜘蛛模型&#xff0c;不论是官方示例或者是epic上购买的模型 然后我用的是epic上面购买的一个眼球蜘蛛&#xff1a; 第一步&#xff0c;我们从根创建一个空项【这个记得脱离父子级到root之…

多传感器时频信号处理:多通道非平稳数据的分析工具(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

四、用户管理

云尚办公系统&#xff1a;用户管理 B站直达【为尚硅谷点赞】: https://www.bilibili.com/video/BV1Ya411S7aT 本博文以课程相关为主发布&#xff0c;并且融入了自己的一些看法以及对学习过程中遇见的问题给出相关的解决方法。一起学习一起进步&#xff01;&#xff01;&#x…

【服务器远程工具】一款好用的xshell

这里写目录标题 背景Tabby简介安装使用SSHSFTPPowerShellGit 设置外观颜色快捷键窗口 插件支持总结 背景 作为一名后端开发&#xff0c;我们经常需要和Linux系统打交道&#xff0c;免不了要使用Xshell这类终端工具来进行远程管理。今天给大家推荐一款更炫酷的终端工具Tabby&…

【SQL应知应会】分析函数的点点滴滴(三)

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分析函数的点点滴滴 1.什么是分析函数&#xff1a;…

计算机中CPU、内存、缓存的关系

CPU&#xff08;Central Processing Unit&#xff0c;中央处理器&#xff09; 内存&#xff08;Random Access Memory&#xff0c;随机存取存储器&#xff09; 缓存&#xff08;Cache&#xff09; CPU、内存和缓存之间有着密切的关系&#xff0c;它们共同构成了计算机系统的核…

go-cqhttp签名服务sign-server的本地搭建

新版go-cqhttp新增签名服务器签名服务器相关问题 Issue #2242 Mrs4s/go-cqhttp GitHubhttps://github.com/Mrs4s/go-cqhttp/issues/2242 其在win10系统下本地化搭建的方式为&#xff1a; 1.解压缩qq安装包提取lib里面的libfekit.so、libQSec.so文件并存放至一个文件夹&…

nodejs高版本降为低版本的详细解决方案

部分老旧项目需要使用低版本的node,网上很多是无效的,高版本无法直接安装低版本node,但是低版本nodejs可以安装部分高版本node,从而达到升级效果,下面这篇文章主要给大家介绍了关于nodejs高版本降为低版本的详细解决方案,需要的朋友可以参考下 1.首先通过控制面板应用卸载当前环…

Spark 4/5

4. 启动Spark Shell编程 4.1 什么是Spark Shell spark shell是spark中的交互式命令行客户端&#xff0c;可以在spark shell中使用scala编写spark程序&#xff0c;启动后默认已经创建了SparkContext&#xff0c;别名为sc 4.2 启动Spark Shell Shell /opt/apps/spark-3.2.3-bi…

opencv检测二维码和条形码

文章目录 1 excel制作简单二维码2 识别二维码和条形码2.1 相关库2.2 decode解码2.3 圈出二维码的位置2.4 判断二维码是否授权 3 完整代码3.1 使用图片进行识别3.2 使用摄像头实时识别 4 总结 1 excel制作简单二维码 使用excel可以实现制作二维码&#xff0c;但只能实现做英文和…

Docker容器日志管理详解

1. 简介 Docker容器日志是指容器在运行过程中产生的各种日志信息&#xff0c;包括错误、警告、信息等。Docker将所有容器的日志统一管理&#xff0c;方便用户对容器进行监控、故障排查和性能分析。 1.1 什么是Docker容器日志 Docker容器日志是容器在运行过程中产生的各种日志…