转自http://blog.youkuaiyun.com/one132/archive/2009/07/06/4325233.aspx
关键字: oracle 左边接 右连接 oracle加号
在Oracle PL-SQL中,左连接和右连接以如下方式来实现
SELECT emp_name, dept_name
FORM Employee, Department
WHERE Employee.emp_deptid(+) = Department.deptid
反之:
SELECT emp_name, dept_name
FORM Employee, Department
WHERE Employee.emp_deptid = Department.deptid(+)则是左连接,无论这个员工有没有一个能在Department表中得到匹配的部门号,这个员工的记录都会被显示
有两个表T1和T2,两个表除了主键索引外均无其他索引,这两个表由T1.F1(主键),T2.F2(主键)进行左连接,SQL语句有两种写法:
1. SELECT * FROM T1,T2 WHERE T1.F1=T2.F2(+)
2. SELECT * FROM T1 LEFT JOIN T2 ON T1.F1=T2.F2
当查看1的执行计划时发现T1为全表扫描,T2为索引扫描。
当查看2的执行计划时发现两个表均为全表扫描。
不过我在oracle9.2自带的SQL Referrence.pdf的第511页上看到有这样一句:
Oracle Corporation recommends that you use the FROM clause OUTER JOIN syntax rather than the Oracle join operator.
前者选择的优化器是RULE,而后者选择的优化器是CBO的ALL ROWS。