内连接(inner join)与外连接(outer join)小结

内连接(inner join)与外连接(outer join)小结mySQL 包含两种联接 分别是内连接 innerjoin 和外连接 outjoin 但我们又同时听说过左连接 交叉连接等术语 本文旨在总结这些术语之间的关系 1 内连接首先说明内连接的一个重要性质 内连接查询结果与表的顺序无关 当然顺序可能会发生变化 但是对应关系绝对不会错乱 1 1 交叉连接 crossjoin 当然 他还有其他的名字 比如 笛卡尔积 交叉积 还有最奇怪的名字

mySQL包含两种联接,分别是内连接(inner join)和外连接(out join),但我们又同时听说过左连接,交叉连接等术语,本文旨在总结这些术语之间的关系。

1. 内连接

首先说明内连接的一个重要性质:内连接查询结果与表的顺序无关
(当然顺序可能会发生变化,但是对应关系绝对不会错乱!!!)

1.1 交叉连接(cross join)

SELECT t.toy,b.boy FROM toys AS t CROSS JOIN boys AS b; 

其中,CROSS JOIN可以省略,简写为

SELECT t.toy,b.boy FROM toys AS t, boys AS b; 

1.2 相等连接

SELECT boys.boy,toys.toy FROM boys INNER JOIN toys ON boys.toy_id=toys.toy_id; 

这里写图片描述

1.3 不等连接

我们继续沿用1.2中的表结构,如果我们想找到每个男孩儿没有的玩具,这时候我们可以使用不等连接(说白了就是=换成<>,其他没有什么区别)

SELECT boys.boy,toys.toy FROM boys INNER JOIN toys ON boys.toy_id<>toys.toy_id ORDER BY boys.boy; 

这里写图片描述

1.4 自然连接

SELECT boys.boy,toys.toy FROM boys NATURAL JOIN toys ORDER BY boys.boy; 

2. 外连接

首先说明外连接不同于内连接的一个性质:外连接查询与表的顺序有关

2.1 左外连接

LEFT OUTER JOIN(左外连接)接收左表的所有行,并用这些行与右表进行匹配
当左表与右表具有一对多的关系时,左外连接特别有用。我们仍然使用之前的表结构

这里写图片描述 这里写图片描述

现在我们利用左外连接找出每个男孩拥有的玩具

SELECT b.boy,t.toy FROM boys b LEFT OUTER JOIN toys t ON b.toy_id=t.toy_id; 

我们发现居然出现了一个NULL,NULL的出现是要告诉我们右表toys中没有与左表boys中的Andy相匹配的行,也就是说

外连接一定会提供数据行,无论还行能否在另一个表中找出相匹配的行

接着做个实验,我们调换左表和右表的顺序

SELECT b.boy,t.toy FROM toys t LEFT OUTER JOIN boys b ON b.toy_id=t.toy_id; 

这里写图片描述

结论:出现NULL的列总是右表中的列

以下时左外连接的实际匹配过程

2.2 右外连接

SELECT b.boy,t.toy FROM toys t RIGHT OUTER JOIN boys b ON b.toy_id=t.toy_id; 

上述代码等同于

SELECT b.boy,t.toy FROM boys b LEFT OUTER JOIN toys t ON b.toy_id=t.toy_id; 

这两种写法都是都把toys作为右表,把boys作为左表

在实际运用过程中,我们一般倾向于只使用一种,另一种简单了解就好。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176072.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午10:45
下一篇 2026年3月26日 下午10:46


相关推荐

  • 关于iframe

    关于iframe

    2022年3月3日
    52
  • steam游戏直连工具

    steam游戏直连工具本文章说下客户端的软件设计客户端比较简单 读取免费云服务器中的游戏 IP 地址 这个 IP 地址可以参考我的另外一个文章 本次采用的是三丰云的免费云主机 设置很简单 直接上获取 IP 地址代码 PublicSubLIS FTP file addressAsStr Dimtext1AsSt

    2026年3月18日
    2
  • 解决HTTP 414“请求URI太长”的思路

    解决HTTP 414“请求URI太长”的思路参考社区问答https://cloud.tencent.com/developer/ask/963271.不建议改apache的配置在Apache下,限制是一个可配置的值。如果想要支持更长的请求URI,请将此值更改为大于默认值8190的值。该值位于/etc/apache2/apache2.conf中。如果不是,请LimitRequestLine10000在下添加一个新行()AccessFil…

    2022年4月29日
    62
  • pycharm添加搜索路径_pycharm系统找不到指定路径

    pycharm添加搜索路径_pycharm系统找不到指定路径为了能让python解释器找到我安装的python包的位置,我把该位置添加到了PYTHONPATH中,结果试了半天,pycharm中的解释器都没能检测到我那个包的存在,而在终端打开python的命令交互模式都是可以获取我在PYTHONPATH中设置的路径的。(气得我一口老血喷出来,哪位大神要是知道这是什么情况,敬请告知呀喵。感激不尽呦^_^)好了,说正事了。pycharm这么气人怎么办呢?闹了半

    2022年8月27日
    10
  • 使用AnalyticDB MySQL创建数据库及表过程

    使用AnalyticDB MySQL创建数据库及表过程简介目标是让云上数据仓库用户及开发者通过简单的步骤体验基于AnalyticDBMySQL版和DMS构建云原生数据仓库的主要流程,场景将通过实例的开通、结构与数据的初始化、报表的开发、报表可视化等环节,用3个具体的应用场景来体验AnalyticDBMySQL版在新零售场景下的交互查询和ETL计算速度,以及通过DMS进行数据仓库数据报表开发的流程。提供的数据集是一个零售场景的模拟数据,包括客户信息、订单记录、货物信息、国家地域信息等内容,数据总量10GB,最大数据表记录数为5999万条。产品简介云原

    2025年12月13日
    7
  • 数电设计-八路抢答器

    1设计要求设计一个能支持八路抢答的智力竞赛抢答器;主持人按下开始抢答的按键后,有短暂的报警声提示抢答人员抢答开始且指示灯亮表示抢答进行中;在开始抢答后数码管显示30秒倒计时;有抢答人员按下抢答键后,在数码管上显示抢答成功人员的编号,倒计时暂停,同时后续抢答人员的抢答将无效;当主持人再次按下按键回到复位状态,倒计时的数码管保持显示30,显示人员编号的数码管灭,指示灯灭。利用数字电路设计一个八路抢答器,允许八路参加,并具有锁定功能,用LED显示最先抢答的队号码,系统设置外部清除键,按动清除键,LE.

    2022年4月5日
    140

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号