oracle中left outer join就是以左表作为基表来进行连接操作,连接的结果中一定会涵盖基表中所有的列,即使有某些列与右表找不到匹配关系。如下分别是city表和stds表中的数据截图:
现在执行以下语句:
现在我们假如要获取sid不等于4的情况的左连接结果,那么有两种选择,一种是在on中添加条件限制,一种是在where中添加条件限制,我们现在来测试两种结果是否相同。 先执行在on中添加条件,执行以下语句:
查看执行结果,我们可以看到结果中仍然包括了基表,也就是city表中的所有行。然后再查看执行计划,可以看到先是ACCESS内层的STDS表,并且加上filter(SID<>4),然后再和外层的CITY表进行左连接操作,所以仍然可以保证city表中每一行都在结果集中。
再执行where中添加条件,执行语句如下:
由于sql的执行顺序是先from得到源数据,再where筛选数据,最后select投影数据。先join之后,结果集中应该有
所以如果做左外连接时,如果右表带条件约束,它把条件约束放在on中和where中得到的结果是不一样的,这时需要根据自己的需求进行选择。
|
|
来自: 张小龙net馆藏 > 《Oracle摘录》