内连接与外连接的区别

article/2025/10/12 16:24:46

有两个表A和表B
A结构如下:
Aidint;标识种子,主键,自增ID
Anamevarchar

数据情况,即用select * from A出来的记录情况如下图1所示:


1:A表数据

B结构如下:
Bidint;标识种子,主键,自增ID
Bnameidint

数据情况,即用select * from B出来的记录情况如下图2所示:


2:B表数据

为了把BidAid加以区分,不让大家有误解,所以把Bid的起始种子设置为100
SQL基本知识的人都知道,两个表要做连接,就必须有个连接字段,从上表中的数据可以看出,在A表中的AidB表中的Bnameid就是两个连接字段。
下图3说明了连接的所有记录集之间的关系:



3:连接关系图

现在我们对内连接和外连接一一讲解。
1.内连接:利用内连接可获取两表的公共部分的记录,即图3的记录集C
语句如下:Select * from A JOIN B ON A.Aid=B.Bnameid
运行结果如下图4所示:


4:内连接数据

其实select * from A,B where A.Aid=B.BnameidSelect * from A JOIN B ON A.Aid=B.Bnameid的运行结果是一样的。
2.外连接:外连接分为两种,一种是左连接(Left JOIN)和右连接(Right JOIN
   (1)左连接(Left JOIN):即图3公共部分记录集C+表A记录集A1。     
      语句如下:select * from A Left JOIN B ON A.Aid=B.Bnameid
      运行结果如下图5所示:


5:左连接数据

      说明:
            在语句中,AB的左边,并且是Left Join,所以其运算方式为:A左连接B的记录=3公共部分记录集C+表A记录集A1
            在图3中即记录集C中的存在的Aid为:2 3 6 7 8           
            图1中即表A所有记录集A中存在的Aid为:1 2 3 4 5 6 7 8 9
            表A记录集A1中存在的Aid=(1中即A表中所有Aid)-(3中即记录集C中存在的Aid),最终得出为:1 4 5 9
            由此得出图5A左连接B的记录=3公共部分记录集C+表A记录集A1,
            最终得出的结果图5中可以看出BnameidBidNULL的记录都为图3公共部分记录集C中的记录;BnameidBidNULLAid1 4 5 9的四笔记录就是表A记录集A1中存在的Aid

   (2)右连接(Right JOIN):即图3公共部分记录集C+表B记录集B1
      语句如下:select * from A Right JOIN B ON A.Aid=B.Bnameid
      运行结果如下图6所示:


6:右连接数据

      说明:
            在语句中,AB的左边,并且是Right Join,所以其运算方式为:A右连接B的记录=3公共部分记录集C+表B记录集B1
            在图3中即记录集C中的存在的Aid为:2 3 6 7 8           
            图2中即表B所有记录集B中存在的Bnameid为:2 3 6 7 8 11
            表B记录集B1中存在的Bnameid=(2中即B表中所有Bnameid)-(3中即记录集C中存在的Aid),最终得出为:11
            由此得出图6A右连接B的记录=3公共部分记录集C+表B记录集B1,
            最终得出的结果图6中可以看出AidAnameNULL的记录都为图3公共部分记录集C中的记录;AidAnameNULLAid11的记录就是表B记录集B1中存在的Bnameid
     
总结:

通过上面的运算解说,相信很多人已经想到,上面的情况(包括图3的关系图)说明的都只是AB的左边的情况,
以下语句BA的右边的又会出现什么情况呢??
select * from B Left JOIN A ON A.Aid=B.Bnameid
select * from B Right JOIN A ON A.Aid=B.Bnameid

其实对图3左右翻转一下就可以得出以下结论:
select * from B Left JOIN A ON A.Aid=B.Bnameidselect * from A Right JOIN B ON A.Aid=B.Bnameid所得出的记录集是一样的

select * from B Right JOIN A ON A.Aid=B.Bnameidselect * from A Left JOIN B ON A.Aid=B.Bnameid所得出的记录集也是一样的。


你是要弄清楚区别在什么地方还是单纯想要文字说明

文字说明的楼上说了一大堆了,不说了。

弄个例题,直观一点。两个表:

--stu

id  name   

1,  Jack

2,  Tom

3,  Kity

4,  nono

--exam

id   grade

1,   56

2,   76

11,  89

内连接 (显示两表id匹配的)

select stu.id,exam.id,stu.name, exam.grade from stu inner join exam on stu.id=exam.id

stu.id   exam.id  name     grade

--------------------------------

1 1 Jack 56

2 2 Tom 76

左连接(显示join 左边的表的所有数据,exam只有两条记录,所以stu.id,grade 都用NULL 显示)

select stu.id,exam.id,stu.name, exam.grade from stu left join exam on stu.id=exam.id

1 1 Jack 56

2 2 Tom 76

3 NULL Kity NULL

4 NULL nono NULL

右连接(与作连接相反,显示join右边表的所有数据)

select stu.id,exam.id,stu.name, exam.grade from stu right join exam on stu.id=exam.id

1 1 Jack 56

2 2 Tom 76

NULL 11 NULL 89


http://chatgpt.dhexx.cn/article/j6b97FUK.shtml

相关文章

内连接、左外连接与右外连接的区别及作用介绍

SQL语句当中比较难的部分就有今天要给朋友们分享的这个,inner join, left join 和 right join他们三个的作用以及区别是什么。 顺便也会把交叉连接一起分享了。 上面会分享一些基本的语法与使用,下方会详细介绍 1)交叉连接,又称笛…

图解数据库左连接、右连接、内连接、外连接、全连接的区别

数据库连表方式 内连接 :inner 、inner join外连接 :outer join 左外连接 :left outer join左连接 :left join右外连接 right outer join右连接: right join 全连接 full join 、union 准备 现在有2张表&#xff0c…

内链接和外连接的区别

内连接,也被称为自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集选取了两个表中所有相匹配的数据,舍弃了不匹配的数据。由于内连接是从结果表中删除与其他连接表中没有匹配的所有行,所以内连接可能会造成信息的丢…

数据库的内连接和外连接的区别

内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。 外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。 左外连接:左边表数据行全部保留…

内连接和外连接区别

在之前,我对MSSQL中的内连接和外连接所得出的数据集不是很清楚。这几天重新温习了一下SQL的书本,现在的思路应该是很清楚了,现在把自己的理解发出来给大家温习下。希望和我一样对SQL的连接语句不太理解的朋友能够有所帮助。(发这么…

数据库中的内连接、自然连接、和外连接的区别

数据中的连接join分为内连接、自然连接、外连接,外连接又分为左外连接、右外连接、全外连接 当然,这些分类都是在连接的基础上,是从两个表中记录的笛卡尔积中选取满足连接的记录。笛卡尔积简单的说就是一个表里的记录要分别和另外一个表的记…

左右连接和内连接的区别

首先,我这有两个表,里面的数据去这样的: 表和数据准备好了,接下来进行操作: (1)先说左连接查询: 左连接:在 LEFT JOIN 左边的表里面数据全被全部查出来,右边的…

内连接和外连接

内连接和外连接都是表的连接方式(将两张表连接起来) 内连接inner join 外连接:左连接 left join,右连接 right join 1.笛卡尔积 表一和表二做笛卡尔积,就是将表一的每一行和表二的每一行进行拼接 所有的这些连接…

数据库-内连接与外连接的区别(举例说明)

内连接,也被称为自然连接,只有两个表相匹配的行才能在结果集中出现。返回的结果集选取了两个表中所有相匹配的数据,舍弃了不匹配的数据。由于内连接是从结果表中删除与其他连接表中没有匹配的所有行,所以内连接可能会造成信息的丢…

内连接与外链接的区别

我们要实习了,实习面试过了,但是由于考试原因经理让我在学校巩固一些SQL知识。于是我就开始了,做题之旅,一天做几个巩固一下,好久没做了,刚做就来问题了。外链接与内连接我居然不知道他们之间的原理&#x…

内连接和外连接的区别--举例

内连接是保证两个表中所有行都满足连接条件,而外连接不仅包含符合连接条件的行,还包含左表、右表或两个边接表中的所有数据行。 内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。 外连接&#xf…

内连接、外连接的区别及作用

1.基本介绍 不管是内连接、外连接还是带where子句的多表查询,都组合自多个表,并生成结果表。 1.内连接:只返回两个表中连接字段相等的行。inner join(等值连接) 只返回两个表中联结字段相等的数据 2.左外连接(也称左连接&#x…

GitHub下载指定文件夹的方法(简单快捷)

GitHub下载指定文件夹的快捷方法 GitHub上默认是无法下载指定的文件夹,然而有时候我们只需要下载其中一个文件夹的内容,比如下图中的GAN: 可以复制该文件夹的链接: 然后在该网站上即可下载到所需的文件:

如何移动下载文件夹到另一个盘?

下载文件夹占用了越来越多的C盘可用空间?本教程将教你如何安全易行地将下载文件夹移动到其他驱动器,以便你可以释放更多的C盘空间。 关于下载文件夹 从网站下载程序后它们会被存储在哪里?一般来说,当你从互联…

文件下载a

文章目录 1、单个文件选择路径下载2、多个文件打包成zip,选择路径下载3、打包下载选中的文件和文件夹只通过前端就下载文件(网络URL)设置下载文件的名称补充 前端代码一个a标签,href就是要访问的controller的路径,以下…

GitHub 下载单个文件/文件夹

来源: github下载单个文件和目录_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1rL411K7Mx?spm_id_from333.880.my_history.page.click 步骤: 下单个文件: 1.首先你给有途径访问到github 2.在浏览器(Edge)扩…

Tabby sftp 下载文件夹

目录 Tabby介绍 下载文件夹 Tabby介绍 Tabby是一个基于 TypeScript 开发的终端模拟器,适用于 Windows,macOS 和 Linux。 可使用SSH、SFTP连接本地和服务器。 下载文件夹 下载文件直接选择本地编辑即可,但是不支持直接操作文件目录&#…

在GitHub 上下载指定的文件夹的两种方法

一、下载所有文件 首先介绍下如果你要下载GitHub下所有的项目文件的话,可以点击其主页下的Clone or download下的Download Zip ,可以直接下载到本地电脑;或者复制其链接,如下 然后再打开Git Bash,前提是你需要电脑已经下载安装好了Git,不会看我上篇安装Git文章。

【google drive 下载整个文件夹】

google drive 下载整个文件夹失败,提示 "try enable third party cookies" refs方法 refs https://support.google.com/drive/answer/2423534?hlen#zippy%2Cblocked-third-party-cookies-can-prevent-drive-web-downloads 方法 在谷歌浏览器地址栏输入…

从github上下载文件,文件夹,整个项目

一、下载文件 1、点进文件,如下图,然后右键红框 2、选择‘将链接另存为’,会出现以下界面 3、然后下载就可以。如果你成功了,恭喜你!但是我失败了。。。 不晓得是我电脑的原因还是别的什么,尝试好多次都不…