基于Oracle的SQL优化教程(三)

表连接

当优化器解析含表连接的目标sql时,它除了会根据目标sql的sql文本的写法来决定表连接的类型之外,还必须决定如下三件事情才能得到最终的执行计划。(1)表连接顺序(2)表连接方法(3)访问单表的方法

表连接类型

1、内连接只要where条件中没有写那些标准sql中定义或者oracle中自定义的表示外连接的关键字,则该sql的连接类型就是内连接。标准sql中内连接的写法是用join on或者join using。目标表1 join 目标表2 on (连接条件)目标表1 join 目标表2 using (连接列集合)对于使用join using的标准sql而言,如果连接列同时又出现在查询列中,则该连接列前不能带上表名或者表名的别名

2、外连接左连接:目标表1 left outer join 目标表2 on (连接条件)或 目标表1 left outer join 目标表2 using (连接列集合)left outer join左边的目标表1作为表连接的驱动表,即表明位置处于left的表就是outer table,驱动表。此时连接结果除了包含目标表1和目标表2中所有满足该连接条件的记录外,还会包含驱动表(目标表1)中所有不满足该连接条件的记录,同时,驱动表中所有不满足该连接条件的纪录所对应的被驱动表(目标表2)中的查询列均会以null值来填充。右连接:目标表1 right outer join 目标表2 on (连接条件)或目标表1 right outer join 目标表2 using (连接列集合)rightouter join右边边的目标表1作为表连接的驱动表,即表明位置处于right的表就是outer table,驱动表。其他的属性和左连接基本相同。 全连接:目标表1 full outer join 目标表2 on (连接条件)或 目标表1 fullouter join 目标表2 using (连接列集合)

全连接可以理解为先做左连接,再做右连接。最后把结果做一个union操作 自定义关键字“(+)”:其含义是关键字出现在哪个表的连接列的后面,就表明那个表会以null值来填充那些不满足连接条件并位于该表的查询列,此时应该以关键字对面的表作为驱动表。

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐