• 售前

  • 售后

热门帖子
入门百科

深入Oracle的left join中on和where的区别详解

[复制链接]
123457108 显示全部楼层 发表于 2021-10-26 13:18:23 |阅读模式 打印 上一主题 下一主题
本日遇到一个求某月全部天数的统计结果,如果某日的结果是0也需要体现出来,即:
日期                  生意业务次数   生意业务金额
2009-4-01           1              10
2009-4-02           2              20
2009-4-03           0              0
2009-4-04          5                50
....
一开始我用的左毗连,用on做为两表关联条件,用where作为过滤条件,但是发现0的数据根本不体现,厥后把where关键字去掉,把过滤条件都放到on里,题目办理,网上一搜,找到了答案:
数据库在通过毗连两张或多张表来返回记载时,都会生成一张中心的临时表,然后再将这张临时表返回给用户。

在利用left jion时,on和where条件的区别如下:
1、on条件是在生成临时表时利用的条件,它不管on中的条件是否为真,都会返回左边表中的记载。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的寄义(必须返回左边表的记载)了,条件不为真的就全部过滤掉。

假设有两张表:

表1 tab1:
id size
1 10
2 20
3 30
表2 tab2:
size name
10 AAA
20 BBB
20 CCC
两条SQL:
1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name='AAA'
2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name='AAA')
第一条SQL的过程:
1、中心表
on条件:
tab1.size = tab2.size
tab1.id    tab1.size    tab2.size     tab2.name
1               10                   10               AAA
2              20                     20             BBB
2             20                      20               CCC
3             30                    (null)              (null)
2、再对中心表过滤
where 条件:
tab2.name='AAA'
tab1.id       tab1.size        tab2.size     tab2.name
1                  10                  10              AAA
第二条SQL的过程:
1、中心表
on条件:
tab1.size = tab2.size and tab2.name='AAA'
(条件不为真也会返回左表中的记载)
tab1.id      tab1.size         tab2.size       tab2.name
1               10                     10                   AAA
2               20                   (null)               (null)
3               30                    (null)                 (null)

其实以上结果的关键缘故原由就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记载,full则具有left和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是雷同的。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作