| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 多表关联查询过滤条件写在on与where后的区别 -> 正文阅读 |
|
[大数据]多表关联查询过滤条件写在on与where后的区别 |
目录 三、left join--左外关联表(left outer join,outer可以省略)? 2、当把左表的谓词写在where后面,右表的谓词写在on后面: 3、当把左表的谓词写在on后面,右表的谓词写在where后面: 四、right join--右外关联表(right outer join,outer可以省略) : 五、full join-- 全外关联表(full outer join,outer可以省略): 2、当把左表的谓词写在where后面,右表的谓词写在on后面: 3、当把左表的谓词写在on后面,右表的谓词写在where后面: 前言:????????多表关联的连接方式有inner join、left join、right join、full join四种,下面通过实验来说明不同连接方式谓词放在on与where后的效果与影响。 一、初始化测试数据:
二、inner join--内关联表:
执行结果如下,4种情况得到结果是相同的。 ?放在on后与where后结果一样,它们的执行计划相同,说明CBO对这两种情况做了相同处理。 三、left join--左外关联表(left outer join,outer可以省略)?
执行结果如下,左关联表就有很大的不同: 1、当把左右表的谓词都写在on后面:????????t1.status=’1’放在on后面,t1表并没有对谓词status进行过滤,结果集显示t1的全表数据。这是由left join的特性决定的,左表会显示全部数据。t2.id<2是先对t2表进行过滤再进行连接,而t1.status=’1’是作为连接条件存在,对连接时产生的笛卡尔积数据做连接过滤。 2、当把左表的谓词写在where后面,右表的谓词写在on后面:????????先对两表进行过滤,再进行left join,显示结果集与写在where后面是不同的,连接方式还是左外连接,显示t1过滤后的全部数据。 3、当把左表的谓词写在on后面,右表的谓词写在where后面:????????这种情况先对t2表过滤,并且t1.id=t2.id,所以会将左连接转换为内连接,左表的谓词条件写在哪个位置都一样。而且因为t2表过滤后数据比t1表少,CBO把t2表当成了驱动表。 4、当把左右表的谓词都放在where后面:????????是先对表进行过滤,然后再对过滤后的数据进行连接。而且我们发现t1表上自动加上了id<2的过滤条件,这是因为有t1.id=t2.id等值连接,如果t1表上id列有索引,性能就能看出差别来了。注意连接方式变成了hash join,这是因为右表的谓词过滤条件写在where后面,CBO会把左连接等价为内连接。? 四、right join--右外关联表(right outer join,outer可以省略) :????????右连接与左连接是相反的,是右表显示全部数据,写在on后面谓词过滤对右表不起作用。 五、full join-- 全外关联表(full outer join,outer可以省略):????????全连接在应用中似乎很少碰到,但是存在即合理,此处也举例说明一下。 1、当把左右表的谓词都写在on后面:????????这种情况不会先对两个表过滤,而是作为连接条件过滤,符合连接就匹配上,不符合的就把左右两表的数据都显示出来,另一表的字段以空显示。 2、当把左表的谓词写在where后面,右表的谓词写在on后面:????????这种情况转换为左外连接,也是先对两表过滤后再关联。 3、当把左表的谓词写在on后面,右表的谓词写在where后面:????????这种情况转换为右外连接,但是也是先对两表过滤后再关联。 4、当把左右表的谓词都放在where后面:????????这种情况CBO将其转换为内连接,先过滤再关联。 六、总结:1、内连接:关联条件在on后面或者where后面,查询结果一样。 2、左外连接:左表谓词和右表谓词在on后面:左表全显示,是因为left join特性,右表过滤后再关联。 3、右外连接:正好和左外连接类似,且相反的效果。 4、全外关联:不常见,但也介绍一下: |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 9:43:34- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |