🚀 个人主页 极客小俊
✍🏻 作者简介:程序猿、设计师、技术分享
🐋 希望大家多多支持, 我们一起学习和进步!
🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注

RIGHT JOIN右外连接概述
我们先说说RIGHT JOIN的概念
这种查询就是把右表中所有的数据记录返回出来, 并且如果左表中没有条件匹配的记录, 那么就补充NULL
通俗的说也就是返回右表中的所有记录,以及左表中满足连接条件的记录, 如果左表中没有满足条件的记录,那么结果中左表的部分会用NULL进行填充!
原理图如下

RIGHT JOIN的语法规则其实和LEFT JOIN一样的!
如下
SELECT [字段..*] FROM 左表名称 RIGHT JOIN 右表名称 ON 左表名称.关联字段 = 右表名称.关联字段;
或者写成以下形式
SELECT [字段..*] FROM 左表名称 RIGHT OUTER JOIN 右表名称 ON 左表名称.关联字段 = 右表名称.关联字段;
应用场景
光这样说,可能你还是不明白,其实RIGHT JOIN和LEFT JOIN都有相似之处!
我们还是来看个案例!
举个栗子
还是以昨天我们看的那个表, Company表和Employee表 这两个表的表结构和数据我在上一章节有相关的测试数据,大家可以去看看!
如图

比如: 我们现在要查询所有员工,并且查看这些员工对应的公司有哪些,没有员工的公司不显示!
如下
SELECT * FROM Company AS c RIGHT JOIN Employee AS e ON c.cid = e.cid
那么这里我们根据问题,把Employee员工表放在了右边, 因为右边全部会被列举出来, 而左边是根据条件进行现实出来的,不符合条件的会补NULL
如图

那么这里我们根据问题,在结合之前我们说过的IS NOT NULL操作符来把想要的信息过滤出来即可!
如下
SELECT c.cname,e.ename FROM Company AS c RIGHT JOIN Employee AS e ON c.cid = e.cid WHERE c.cname IS NOT NULL
如图

交换左右表的位置
大家有没有想过,把左表和右表,调换位置看看效果??
有很多人也问过这个问题,交换表的位置,有什么意义吗?
我们先看看以下这两段SQL查询语句有什么效果!
SELECT * FROM Company AS c RIGHT JOIN Employee AS e
ON c.cid = e.cid
SELECT * FROM Employee AS c RIGHT JOIN Company AS e
ON c.cid = e.cid
如图

首先,我们要确定的一件事情就是不管你这么调换位置,右表始终都是会把所有数据显示出来,对吧!
那么如果我们将RIGHT JOIN中的两个表位置进行交换,并改为LEFT JOIN(或反之),我们会得到相同的结果集, 你信不信?
如下
SELECT * FROM Company AS c RIGHT JOIN Employee AS e
ON c.cid = e.cid
SELECT * FROM Employee AS c LEFT JOIN Company AS e
ON c.cid = e.cid
如图

看看是不是一样的结果集? 但是区别在于逻辑上的左和右的位置会发生变化而已!
如何选择使用LEFT JOIN 与 RIGHT JOIN
这一点大家要注意一下,在实际开发中,我们到底是把表的位置放左还是放右,取决于你的开发逻辑需决定!
就像是在实际开发中如果遇到想要确保结果集中包含左表的所有记录即便是右表中没有匹配的记录,那么应该使用LEFT JOIN,并将左表放在JOIN的左侧,对吧!
如果想要确保结果集中包含右表的所有记录,即便是左表中没有匹配的记录, 那么应该使用RIGHT JOIN,并将右表放在JOIN的右侧
尽管我们可以通过交换表位置和使用LEFT JOIN与RIGHT JOIN达到相同效果,但从业务上根据合理的需求选择使用LEFT JOIN与RIGHT JOIN会让逻辑变得更加清晰!
举个栗子
我们放表顺序应该是要根据业务逻辑中的主从关系决定吧!
就像是订单和客户的场景中,通常情况下订单是依赖于客户而存在的,那么在进行连接查询的时候,是不是应该要将客户表放在左侧, 而使用LEFT JOIN更合适呢,因为这反映了订单是从客户那里产生的逻辑!
最后 小结
RIGHT LEFT用于从两个或多个表中基于共同条件的字段将数据组合起来,但返回的结果集以右表为主, 当执行A表 RIGHT JOIN B表时,最后的结果集将包括表B表的所有记录。对于表B表中的每条记录,如果在表A表中存在一条或多条考可以匹配上对应条件, 这些记录将被包括在结果集中,
如果表B表中的某条记录在表A表中没有匹配条件,那么表A表中的字段在结果集中将显示为NULL


"👍点赞" "✍️评论" "收藏❤️"欢迎一起交流学习❤️❤️💛💛💚💚

好玩 好用 好看的干货教程可以点击下方关注❤️微信公众号❤️
说不定有意料之外的收获哦..🤗嘿嘿嘿、嘻嘻嘻🤗!
🌽🍓🍎🍍🍉🍇

SQL RIGHT JOIN右外连接查询详解

1012

被折叠的 条评论
为什么被折叠?



