Oracle左连接和右连接实现方式

2023-07-06   


在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。


相关内容:

  1. 用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
  2. 介绍一下Oracle的操作符优化
  3. Oracle DBA笔试题
  4. 阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
  5. 数据库常见笔试面试题