【你也能从零基础学会网站开发】 SQL Server结构化查询语言数据操作应用--DML篇 浅谈SQL JOIN多表查询之RIGHT JOIN右外连接查询 你搞懂了吗?
🚀 个人主页 极客小俊
✍🏻 作者简介:程序猿、设计师、技术分享
🐋 希望大家多多支持, 我们一起学习和进步!
🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注
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
"👍点赞" "✍️评论" "收藏❤️"
欢迎一起交流学习❤️❤️💛💛💚💚
好玩 好用 好看
的干货教程可以
点击下方关注❤️
微信公众号❤️
说不定有意料之外的收获哦..🤗嘿嘿嘿、嘻嘻嘻🤗!
🌽🍓🍎🍍🍉🍇