日期:2014-05-16  浏览次数:20408 次

oracle 左边接 右连接 oracle加号
t1.name(+) = t2.name 的意思是
用t2表做主表 t1表做副表做右关联
会用t2的所有数据,如果和t1关联不上则放空值

转自http://blog.csdn.net/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

???此SQL文使用了右连接,即“(+)”所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配,也就是说上例中无论会不会出现某个部门没有一个员工的情况,这个部门的名字都会在查询结果中出现。

反之:
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。