oracle 左连接 还是右连接

   

  1. 对于外连接,Oracle中可以使用“(+)”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN,下面将配合实例一一介绍。   
  2.   
  3.   1. LEFT OUTER JOIN:左外关联   
  4.   
  5.   SELECT e.last_name, e.department_id, d.department_name   
  6.   
  7.   FROM employees e   
  8.   
  9.   LEFT OUTER JOIN departments d   
  10.   
  11.   ON (e.department_id = d.department_id);   
  12.   
  13.   等价于   
  14.   
  15.   SELECT e.last_name, e.department_id, d.department_name   
  16.   
  17.   FROM employees e, departments d   
  18.   
  19.   WHERE e.department_id=d.department_id(+);   
  20.   
  21.   结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录。   
  22.   
  23.   2. RIGHT OUTER JOIN:右外关联   
  24.   
  25.   SELECT e.last_name, e.department_id, d.department_name   
  26.   
  27.   FROM employees e   
  28.   
  29.   RIGHT OUTER JOIN departments d   
  30.   
  31.   ON (e.department_id = d.department_id);   
  32.   
  33.   等价于   
  34.   
  35.   SELECT e.last_name, e.department_id, d.department_name   
  36.   
  37.   FROM employees e, departments d   
  38.   
  39.   WHERE e.department_id(+)=d.department_id;   
  40.   
  41.   结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录。   
  42.   
  43.   3. FULL OUTER JOIN:全外关联   
  44.   
  45.   SELECT e.last_name, e.department_id, d.department_name   
  46.   
  47.   FROM employees e   
  48.   
  49.   FULL OUTER JOIN departments d   
  50.   
  51.   ON (e.department_id = d.department_id);   
  52.   
  53.   结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录。   
  54.   
  55.   外连接:   
  56.   
  57.   除了显示匹配相等连接条件的数据外,还可以显示某一个表中无法匹配相等连接条件的记录!   
  58.   
  59.   ------------------------------------------------   
  60.   
  61.   1) 左条件(+) = 右条件   
  62.   
  63.   左条件所在的表必须严格进行相等连接条件的匹配,而右条件所在的表除了匹配相等连接条件外,还可以显示无法匹配连接条件的数据!   
  64.   
  65.   也称为右外连接.   
  66.   
  67.   --------------------------------   
  68.   
  69.   可以用下列语句取代:   
  70.   
  71.   SELECT...FROM 表1 RIGHT OUTER JOIN 表2 ON 条件;   
  72.   
  73.   2) 左条件 = 右条件(+)   
  74.   
  75.   右条件所在的表必须严格进行相等连接条件的匹配,而左条件所在的表除了匹配相等连接条件外,还可以显示无法匹配连接条件的数据!   
  76.   
  77.   也称为左外连接.   
  78.   
  79.   --------------------------------   
  80.   
  81.   可以用下列语句取代:   
  82.   
  83.   SELECT...FROM 表1 LEFT OUTER JOIN 表2 ON 条件;   
  84.   
  85.   REM 除了相等连接之外,显示没有员工的部门信息.   
  86.   
  87.   SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO(+) = DEPT.DEPTNO;   
  88.   
  89.   SELECT * FROM EMP RIGHT OUTER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;   
  90.   
  91.   REM 除了相等连接之外,显示没有部门的员工信息.   
  92.   
  93.   SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO(+);   
  94.   
  95.   SELECT * FROM EMP LEFT OUTER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;   
  96.   
  97.   Oracle 建议你用在From语句后用Outer Join语法 而不是Oracle的Join操作符(+).而且(+)是要受下面的规则限制的,但Outer Join语法则不受的~~   
  98.   
  99.   1)你不可以在查询块中使用(+) 当它同时包含 join的from语句中   
  100.   
  101.   2)(+)只是在where语句中,并且只能对应一个表或视图的一行字段   
  102.   
  103.   3)如果A和B做联接时有多个条件,那么(+)必须完善所有的匹配条件,   
  104.   
  105.   如果没有 ,oracle不会警告你~只是结果自然不同的   
  106.   
  107.   4)不可以在作出一个表外查询 另张表内查询的(+)联接操作~~   
  108.   
  109.   5)不可以用(+)外联接到自己 当然Self Join是可以的   
  110.   
  111.   6)含(+)的Where后的注意   
  112.   
  113.   OR不可用   
  114.   
  115.   IN不可用   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值