基于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值来填充那些不满足连接条件并位于该表的查询列,此时应该以关键字对面的表作为驱动表。
推荐阅读
-
使用数据库客户端工具Oracle SQL Developer加载第三方驱动连接mysql的方法
-
基于Oracle的高性能动态SQL程序开发
-
Oracle SQL tuning 数据库优化步骤分享(图文教程)
-
oracle数据库sql的优化总结
-
Oracle SQL性能优化系列学习三
-
oracle下一条SQL语句的优化过程(比较详细)
-
使用数据库客户端工具Oracle SQL Developer加载第三方驱动连接mysql的方法
-
Oracle性能优化——SQL基线(SQLbaseline)的载入与进化(11g中引入的基线)
-
Oracle 表三种连接方式使用介绍(sql优化)
-
Oracle数据库中SQL语句的优化技巧