0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在使用left jion时,on和where条件的区别

数据分析与开发 来源:数据分析与开发 2023-06-16 14:46 次阅读

前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。

后来发现 join on and 不会过滤结果记录条数,只会根据and后的条件是否显示 B表的记录,A表的记录一定会显示。

不管and 后面的是A.id=1还是B.id=1,都显示出A表中所有的记录,并关联显示B中对应A表中id为1的记录或者B表中id为1的记录。

运行sql :

select*fromstudentsleftjoinclasscons.classId=c.idorderbys.id
9995c980-0bf9-11ee-962d-dac502259ad0.png

运行sql :

select*fromstudentsleftjoinclasscons.classId=c.idands.name="张三"orderbys.id
99acf1fa-0bf9-11ee-962d-dac502259ad0.png

运行sql :

select*fromstudentsleftjoinclasscons.classId=c.idandc.name="三年级三班"orderbys.id
99b6cf5e-0bf9-11ee-962d-dac502259ad0.png

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

在使用left jion时,on和where条件的区别如下:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

假设有两张表:

表1:tab2

id size
1 10
2 20
3 30

表2:tab2

size name
10 AAA
20 BBB
30 CCC

两条SQL:

1、

select*formtab1leftjointab2on(tab1.size=tab2.size)wheretab2.name=’AAA’

2、

select*formtab1leftjointab2on(tab1.size=tab2.sizeandtab2.name=’AAA’)

第一条SQL的过程:

1、中间表on条件:

tab1.size=tab2.size
99d5a2e4-0bf9-11ee-962d-dac502259ad0.png

2、再对中间表过滤where 条件:

tab2.name=’AAA’
99f17974-0bf9-11ee-962d-dac502259ad0.png

第二条SQL的过程:

1、中间表on条件:

tab1.size=tab2.sizeandtab2.name=’AAA’

(条件不为真也会返回左表中的记录)9a0ecc2c-0bf9-11ee-962d-dac502259ad0.png

其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。
责任编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SQL
    SQL
    +关注

    关注

    1

    文章

    738

    浏览量

    43462
  • 数据库
    +关注

    关注

    7

    文章

    3591

    浏览量

    63371

原文标题:SQL 语句中 left join 后用 on 还是 where,区别大了!

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [求助]while循环里边的事件结构和条件结构有什么区别

    1、求助while循环里边的事件结构和条件结构有什么区别?感觉两者实现的功能基本上一样,除了事件结构效率比较高一些。2、LabVIEW同一层次的语句是否是并行执行的?有没有执行的先后顺序?谢谢各位大神,在下菜鸟
    发表于 10-20 16:01

    Hive查询之where语句剖析

    黑猴子的家:Hive 查询之 where 语句
    发表于 07-12 13:46

    为什么Crosstalk,Left-to-Right 和Right-to-Left是不一样的?

    看了些D类功放的SPEC,发现Crosstalk,Left-to-Right 和Right-to-Left是不一样的?为什么会不一样?
    发表于 08-12 06:27

    m3 line stage left channel cir

    m3 line stage left channel circuit
    发表于 09-08 21:48 1985次阅读
    m3 line stage <b class='flag-5'>left</b> channel cir

    Where Is Ground?

    Where Is Ground? Bill Laumeister
    发表于 10-02 00:06 841次阅读
    <b class='flag-5'>Where</b> Is Ground?

    SQL中on条件where条件区别

    SQL中on条件where条件区别 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 在使用l
    发表于 11-28 14:34 3269次阅读
    SQL中on<b class='flag-5'>条件</b>与<b class='flag-5'>where</b><b class='flag-5'>条件</b>的<b class='flag-5'>区别</b>

    SQL语句中where条件后为什么要写上1=1

    这段代码应该是由程序(例如Java)中生成的,where条件中 1=1 之后的条件是通过 if 块动态变化的。例如:
    的头像 发表于 02-15 14:51 4943次阅读

    C#基础教程-查询-复合from、where子句

    C#基础教程-查询-复合from、where子句(嵌入式开发平台排行榜)-文档为C#基础教程-查询-复合from、where子句总结文档,是一份不错的参考资料,感兴趣的可以下载看看,,,,,,,,,,,,,
    发表于 08-04 14:53 1次下载
    C#基础教程-查询-复合from、<b class='flag-5'>where</b>子句

    SQL语句中left join后用on还是where

    来自丨blog.csdn.net/wqc19920906/article/details/79785424 前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条
    的头像 发表于 11-22 11:08 1932次阅读

    什么是Shift-Left安全?

    在软件开发中,Shift-Left是一种帮助开发人员在软件开发过程早期发现漏洞和编码错误的做法。Shift-Left Security是一种有效的方法,它专注于安全性,并有助于在软件发布之前很久
    的头像 发表于 05-16 11:31 482次阅读
    什么是Shift-<b class='flag-5'>Left</b>安全?

    insert后面可以跟where

    可以,"INSERT"语句可以与"WHERE"子句一起使用。"INSERT"语句用于向数据库表中插入新的行,而"WHERE"子句用于指定插入行的条件。 下面是一个示例: INSERT
    的头像 发表于 11-21 14:20 3051次阅读

    sql语句where条件查询

    SQL是一种用于管理和操作关系型数据库的编程语言。其中,WHERE子句是用于过滤查询结果的重要部分。通过WHERE条件,我们可以指定一系列条件,以仅返回满足
    的头像 发表于 11-23 11:28 483次阅读

    sql怎么在where条件判断

    在SQL中,WHERE条件用于筛选符合特定条件的记录。它提供了一种在查询中过滤数据的方法,使您能够根据所需的特定条件对查询结果进行更精确的控制。 在
    的头像 发表于 11-23 11:30 847次阅读

    sql where条件的执行顺序

    SQL语句中的WHERE条件是用来筛选数据的,它决定了哪些数据会被返回给用户。WHERE条件的执行顺序是影响SQL语句性能的一个重要因素,正确地理解和优化
    的头像 发表于 11-23 11:31 1029次阅读

    sql的where条件多个and顺序

    在SQL中,WHERE子句用于过滤查询结果以提供符合特定条件的记录。当有多个AND操作符时,WHERE子句的顺序并不会影响查询结果,但是正确的AND操作符顺序可以提高查询的可读性和性能。 首先,我们
    的头像 发表于 11-23 11:33 1944次阅读