【精】一张图搞懂是SQL join,图解SQL的7种JOIN-程序员宅基地

技术标签: 面试  MySQL  mysql  数据库  sql  

通过集合的方式来理解SQL的七种join,更加直观易懂
下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。
在这里插入图片描述
下面我们来一个个看:

1.INNER JOIN(内连接)

在这里插入图片描述

可以理解为取两个集合根据条件取交集

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

2.LEFT JOIN(左连接)

在这里插入图片描述
取左边集合的全集

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

3.RIGHT JOIN(右连接)

在这里插入图片描述
同上,取右边集合的全集

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

4.OUTER JOIN(外连接)

在这里插入图片描述
取两个集合的并集

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

但是如果是MySQL,就没有外连接,不过可以通过左右连接进行union来实现,注意是union 不是union all ,union可以去重

SELECT * FROM Table_A A LEFT JOIN Table_B B ON A.Key = B.Key

UNION

SELECT * FROM Table_A A RIGHT JOIN Table_B B ON A.Key = B.Key;

5.LEFT JOIN EXCLUDING INNER 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 JOIN EXCLUDING INNER 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 JOIN EXCLUDING INNER 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
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dz77dz/article/details/126977818

智能推荐

【Android N兼容问题】Android N上系统预置应用调用第三方库初始化失败_caller="/system/lib/libnativeloader.so-程序员宅基地

文章浏览阅读1.4w次。【Android N兼容问题】Android N上对三方应用调用NDK平台私有库进行了限制,另外应用调用三方平台的NDK库也有可能出现问题,本文是rom开发中与到的系统应用链接三方平台so库时出现失败,文章末尾也对三方应用链接系统私有库出问题的现象进行了规范总结。_caller="/system/lib/libnativeloader.so

JAVA 系统变量之System.getenv()和System.getProperty() 用法-程序员宅基地

文章浏览阅读286次。Java提供了System类的静态方法getenv()和getProperty()用于返回系统相关的变量与属性,getenv方法返回的变量大多于系统相关,getProperty方法返回的变量大多与java程序有关。System.getenv() 方法是获取指定的环境变量的值。System.getenv(String str) 接收参数为任意字符串,当存在指定环境变量时即返回环境变量的值,否..._system.getproperty system.getenv -d

S交换机与NLB服务器直连做网关(增加二层交换机方案和单设备物理链路环回方案)...-程序员宅基地

文章浏览阅读219次。(推荐在V200R003之前版本使用增加二层交换机方案和单设备物理链路环回方案)网络负载均衡NLB(Network Load Balance)是微软在Windows Server上开发的多服务器群集负载均衡特性。对于使用Windows Server的企业来说,实现设备与NLB服务器群集的对接非常重要。本文描述了S系列交换机与NLB服务器群集直连做网关的场景分析和配置过程。背景..._winserver nlb 添加网关

docker虚拟化技术_docker 显卡虚拟化-程序员宅基地

文章浏览阅读330次。docker虚拟化技术概念理解 虚拟化:是一种资源管理技术,将计算机上的各种实体资源进行抽象,重新呈现出来,打破了实体结构之间不可切割的障碍,使用户以更加合理的组态使用资源。比如:一个32G内存2T固态硬盘16G显卡的计算机,用来学习python基础,希望可以同时提供4-5个人独立使用三台计算机,爷爷:1G内存256机械512集显父亲: 2G内存1T机械1G集显儿子..._docker 显卡虚拟化

java游戏开发杂谈 - java是什么_java游戏是什么时代-程序员宅基地

文章浏览阅读9.9k次,点赞9次,收藏12次。java是一门编程语言, 它有三个开发平台:j2ee、j2se、 j2me。(其实android也算一个了) j2ee, 也就是web开发,比如网站、各类管理系统,主要是围绕数据库、网页等进行的开发。j2ee涵盖的技术比较多,除了java语法,还需要掌握html/css/javascript等浏览器前端开发技术、jsp/servlet等服务器开发技术,mysql/oracle/sqlse..._java游戏是什么时代

[小小项目]背单词的程序---1.0_纯C语言_单文件版本_背单词程序设计代码c语言-程序员宅基地

文章浏览阅读2.1k次,点赞18次,收藏56次。实现命令行背单词功能_背单词程序设计代码c语言

随便推点

Android4.2.2多媒体架构MediaPlay的创建过程分析(一)_sp<mediaplayerbase> 怎么理解-程序员宅基地

文章浏览阅读490次。本文均属自己阅读源码的点滴总结,转账请注明出处谢谢。欢迎和大家交流。qq:1037701636 email:[email protected]源码版本Version:4.2.2; 硬件平台 全志A31 前沿:回首往事,记得2012年的时候,那时还年少不知,就研究过android的多媒体框架,那时还是2.3的源码,看过stagefr_sp 怎么理解

在 Delphi 中调用 JavaScript_cef4delphi call js-程序员宅基地

文章浏览阅读1.9k次。有时做项目难免用到代码交叉调用,delphi中执行js就是一种,两种方法可用:一、使用webbrower,比较麻烦二、使用ScriptControl,简单方便:1.首先uses ComObj;2.通用函数:function ExecScript(Code,Lang,Func:string):string;var script:OleVariant;begin try_cef4delphi call js

pandas,numpy学习记录(不断补充)_将array_of_arrays转换为扁平线性的一维数组-程序员宅基地

文章浏览阅读331次。pandas安装:conda install pandas导入pandas包:import pandas as pdimport numpy as npimport matplotlib.pyplot as plt通过传递值列表来创建一个Series,让pandas创建一个默认的整数索引:s = pd.Series([1,3,5,np.nan,6,8])print(..._将array_of_arrays转换为扁平线性的一维数组

081、Weave Scope 多主机监控(2019-04-29 周一)-程序员宅基地

文章浏览阅读182次。参考https://www.cnblogs.com/CloudMan6/p/7674011.htmlWeaveScope除了监控容器,还可以监控DockerHost。点击顶部HOSTS菜单项,地图将显示当前host。与容器类型,点击该host图标将显示host的详细信息host当前的资源使用情况和历史曲线一览无余,除此之外也能很方便的查看..._weavescope版本历史

刷LeetCode(C++)的小心得(持续更新)_刷leetcode str.len-程序员宅基地

文章浏览阅读909次,点赞2次,收藏2次。&引用的用法,只是一个别名 二叉树层次遍历,使用队列 如果要求类似二维数组形式输出,可以使用循环嵌套,利用每次入栈的元素个数来作为第二个循环的次数。如果只是要求输出一维数组的形式,直接使用一个循环输出即可。 if if if 和 if else if else if的区别 pos = rand%(n-i) swap(temp[pos+i], temp[i]) 随机打乱数组..._刷leetcode str.len

部署 Flask 应用到 WSGI 服务器_flask使用wsgi部署-程序员宅基地

文章浏览阅读209次,点赞2次,收藏4次。(可选): 如果你的 Flask 应用需要通过域名来访问,你可能需要配置一个反向代理服务器(如 Nginx 或 Apache)来将客户端的请求转发到 WSGI 服务器。: 首先,你需要选择一个 WSGI 服务器来部署 Flask 应用。: 部署完成后,确保监控服务器的运行状态,并及时处理可能出现的异常情况。: 使用命令行进入到 Flask 应用的根目录,然后执行以下命令启动 WSGI 服务器。的 Python 文件,并编写你的 Flask 应用代码。部署 Flask 应用到 WSGI 服务器需要一些步骤。_flask使用wsgi部署