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

    文章

    762

    浏览量

    44120
  • 数据库
    +关注

    关注

    7

    文章

    3798

    浏览量

    64370

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

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

收藏 人收藏

    评论

    相关推荐

    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 2099次阅读
    m3 line stage <b class='flag-5'>left</b> channel cir

    Where Is Ground?

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

    SQL中on条件where条件区别

    SQL中on条件where条件区别 数据库通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
    发表于 11-28 14:34 3408次阅读
    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 5167次阅读

    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 2161次阅读

    什么是Shift-Left安全?

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

    insert后面可以跟where

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

    sql语句where条件查询

    的细节,包括使用的操作符、条件的组合、多张表的查询、条件的性能优化等方面。 首先,让我们了解一下WHERE子句中常用的操作符。SQL中,常用的操作符包括: 比较操作符: 等于(=):
    的头像 发表于 11-23 11:28 1195次阅读

    sql怎么where条件判断

    SQL中,WHERE条件用于筛选符合特定条件的记录。它提供了一种查询中过滤数据的方法,使您能够根据所需的特定
    的头像 发表于 11-23 11:30 1920次阅读

    sql where条件的执行顺序

    深入讨论WHERE条件的执行顺序之前,先回顾一下一般SQL语句的执行顺序。一条SQL语句的执行通常可以分为以下几个步骤:解析器分析语法、语义校验、查询优化器生成执行计划、执行计划生成与执行。在这个过程中,
    的头像 发表于 11-23 11:31 2202次阅读

    sql的where条件多个and顺序

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

    sql语句多个条件怎么连接

    SQL中,多个条件可以使用逻辑运算符连接,常用的逻辑运算符有AND、OR和NOT。这些运算符可以帮助我们查询中指定多个条件以过滤数据,从而获得我们需要的结果集。 AND运算符用于同
    的头像 发表于 11-23 11:34 2436次阅读