oracle中右表有过滤条件的left outer join
来源:互联网 发布:免费微场景制作软件 编辑:程序博客网 时间:2024/05/20 10:21
oracle中left outer join就是以左表作为基表来进行连接操作,连接的结果中一定会涵盖基表中所有的列,即使有某些列与右表找不到匹配关系。如下分别是city表和stds表中的数据截图:
现在执行以下语句:
select city.name,stds.sid,stds.sname from city left outer join stds on city.id=stds.cid;
其结果截图如下,即使没有湖南的学生,湖南那一项仍然在结果集中,因为city表是基表,它的每一项都会在结果集中。
现在我们假如要获取sid不等于4的情况的左连接结果,那么有两种选择,一种是在on中添加条件限制,一种是在where中添加条件限制,我们现在来测试两种结果是否相同。
先执行在on中添加条件,执行以下语句:
select city.name,stds.sid,stds.sname from city left outer join stds on city.id=stds.cid and stds.sid!=4;
执行结果和执行计划如下:
查看执行结果,我们可以看到结果中仍然包括了基表,也就是city表中的所有行。然后再查看执行计划,可以看到先是ACCESS内层的STDS表,并且加上filter(SID<>4),然后再和外层的CITY表进行左连接操作,所以仍然可以保证city表中每一行都在结果集中。
再执行where中添加条件,执行语句如下:
select city.name,stds.sid,stds.sname from city left outer join stds on city.id=stds.cid where stds.sid!=4
其执行结果如下图所示:
由于sql的执行顺序是先from得到源数据,再where筛选数据,最后select投影数据。先join之后,结果集中应该有
sid为null的结果项,但是由于oracle中任何与null做=或者!=等逻辑判断得到的结果都是unknown,归为false,
所以sid为null的项最终会被剔除掉,而sid=4的数据项也会被剔除掉,所以才出现了上述结果。
下面是做的一个null做等于判断和不等于判断的截图:
所以如果做左外连接时,如果右表带条件约束,它把条件约束放在on中和where中得到的结果是不一样的,这时需要根据自己的需求进行选择。
- oracle中右表有过滤条件的left outer join
- Oracle的left outer join查询(转)
- ORACLE- join,inner join 与 left join, left outer join
- left outer join 结合条件查询
- hive left outer join where 条件问题
- left outer join 的真谛
- Oracle中Left Outer Join和外关联(+)的区别
- Oracle中Left Outer Join和外关联(+)的区别
- left outer join,inner join,right outer join的区别
- SQL中 inner join、 left outer join 、right outer join、 full outer join之间的区别
- inner join,outer join,left join,right join的区别
- inner join,outer join,left join,right join的区别
- inner join,outer join,left join,right join的区别
- left join,right join,inner join,outer join的用法
- Inner join,outer join,left join,right join的区别
- Inner join,outer join,left join,right join的区别
- left join 和 left outer join 的区别的总结
- left join 和 left outer join 的区别
- POJ 1185 状压DP
- stm32F10x 看程序知识点记录
- @RequestBody, @ResponseBody 注解详解
- Jackcard相似度和余弦相似度(向量空间模型)的java实现
- HDU 2000
- oracle中右表有过滤条件的left outer join
- 递推递归练习 M
- HTMl基本知识点——列表
- c++ --------- 多态下的菱形继承,菱形虚拟继承
- 下沉的船
- onSaveInstanceState 和onRestoreInstanceState的使用方法
- nodejs中交互式运行环境---REPL
- 第一天使用csdn博客
- codeforce 761E