首页 > 数据库 >sql中left join和right join混用

sql中left join和right join混用

时间:2023-07-10 23:33:06浏览次数:39  
标签:right JOIN bid sql join LEFT SELECT left

sql中leftjoin和rightjoin混⽤
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的⾏
如上所⾔,我们只做⼀下left join的实验,right join和left join 类似
测试⼀共三张表,a b c

表结构和数据分别如下

a表

b表

c表

然后我们来试⼀下左连接 1, 我们来查询a b两张表,连接他们aid=bid的选项 sql>>SELECT * FROM a LEFT JOIN b on aid=bid
看图很好理解,因为是a左连接b,所以b中为空的元素 ,在查询结果中以NULL的形式补全 同理可得 sql>>SELECT * FROM a LEFT JOIN c on aid=cid
sql>>SELECT * FROM c LEFT JOIN b on bid=cid sql>>SELECT * FROM c LEFT JOIN b on cid=bid
也就是on后⾯的顺序⽆所谓,⽆论是bid=cid还是cid=bid,重点是前⾯的left join还是right join

2,我们来试⼀下如果三张表左连接呢,会有什么情况? sql>>SELECT * FROM a
LEFT JOIN b on bid=aid LEFT JOIN c on aid=cid
sql>>SELECT * FROM a LEFT JOIN b on bid=aid LEFT JOIN c on bid=cid
3,如果我⽤了⼀个right join呢? sql>>SELECT * FROM a LEFT JOIN b on bid=aid RIGHT JOIN c on bid=cid
这⾥该怎么理解呢? 我们理解的时候可以把它拆成两部分去理解 ⽐如第⼀部分 sql>>SELECT * FROM a LEFT JOIN b on bid=aid

然后再思考第⼆部分,假如上图是⼀张表 我们叫它a_b 你可以新建⼀个视图,就可以真成为⼀张虚表了 sql>>create VIEW a_b as (SELECT * FROM a LEFT JOIN b on bid=aid)
然后我们继续做下⾯⼀部分 sql>>select * from a_b right join c on bid=cid
可见,与上⾯的结果是⼀样的,当然这是我们理解的过程,实际数据库服务器执⾏的时候可能不是这样的,它会做⼀些优化,提⾼效率


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

标签:right,JOIN,bid,sql,join,LEFT,SELECT,left
From: https://www.cnblogs.com/JSD1207ZX/p/17542682.html

相关文章

  • [ICDE 2022]How Learning Can Help Complex Cyclic Join Decomposition
    [ICDE2022]HowLearningCanHelpComplexCyclicJoinDecomposition总结主要贡献是把子图匹配策略的cost的判断改为了GNN实现的预测(写得挺模棱两可的)动机解决子图匹配的一个重要问题是解决复杂循环连接查询。文章除了在工程方面提供了GUI,主要的贡献是设计了合理的框架,使用A......
  • AT_agc062_a [AGC062A] Right Side Character 对自己的警告--zhengjun
    自己推性质的能力是真的差。如果最后一个字符是A,那么答案就是A(分为全是A和存在B两种情况证明即可)否则如果最后一个字符是B,检查是否会变为以A结尾如果原串为AA...ABB...B的话,答案为B否则最后的B会不断减少直到前面的A成为最后一个字符做了1h才做出......
  • transmission提示"No space left on device"错误
    通过df-h发现根目录空间已满通过du-h-x--max-depth=1找到/var/cache/apt/archives和/lib/modules两个目录占用较大。/var/cache/apt/archives的清理:sudoapt-getclean/lib/modules的清理:先看一下当前使用的版本:uname-a使用命令查看目前已经安装的内核:dpkg--get-s......
  • js 如何使用 join() 方法将数组的所有元素组成一个字符串。
    <html><body><scripttype="text/javascript">vararr=newArray(3);arr[0]="George"arr[1]="John"arr[2]="Thomas"document.write(arr.join());document.write("<br/>&q......
  • 京东面试官问:LEFT JOIN关联表中用ON还是WHERE跟条件有什么区别
    之前有码友去京东面试,被问到LEFTJOIN关联表中用ON还是WHERE跟条件有什么区别,很快就答出来了,可是追问什么原因造成这一情况的,一时没回答上来。下面说说,想通过AleftBjoinonand后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。后来发现joinonand不会过......
  • ENVI可以修改tif图像的头文件信息吗?如cellsize、top、left、bottom、right四至等信息?
    参考:https://jingyan.baidu.com/article/c843ea0b4004ae37921e4a2a.htmlEditHeaderEditAttributes MapInfo......
  • JUC-ForkJoin
    1,ForkJoin简介ForkJoin是由JDK1.7之后提供的多线程并发处理框架。ForkJoin框架的基本思想是分而治之。什么是分而治之?分而治之就是将一个复杂的计算,按照设定的阈值分解成多个计算,然后将各个计算结果进行汇总。相应的,ForkJoin将复杂的计算当做一个任务,而分解的多个计算则是当做......
  • Subquery? No, it's join!
    作者:王旭东Databend研发工程师https://github.com/xudong963在SQL查询中,子查询是一种常用的技术,它允许我们在一个查询内部嵌套另一个查询,以实现更复杂的数据检索和分析。如何在数据库内核中高效的处理子查询是非常有挑战的,本文将介绍如何在Databend中构建state-of-art......
  • linq left join group by count组合统计,防止count()为null结果为1的错误。
    原生sqlselectcar.id,carnum,count(carplan.carid)astimeLenfromtab_carascarjointab_inComeTypeasincomeoncar.inComeTypeId=income.IdandinComeTypeId=1andstateCode=1andcarTypeId=1leftjointab_carPlanascarplanoncar.id=carplan.carIdandca......
  • UPDATE INNER JOIN和UPDATE LEFT JOIN跨表更新
    UPDATEJOIN是用于执行跨表更新的MySQL语句,这意味着我们可以使用带有JOIN子句条件的另一个表来更新一个表。此查询根据PRIMARY Key和FOREIGN Key以及指定的连接条件更新和更改多个表连接的数据。我们可以使用UPDATE 查询一次更新单个或多个列。一、MySQLUpdateJoin语......