zoukankan      html  css  js  c++  java
  • [转]Oracle 加号外连接

    今天在一段oracle的sql语句中看到这样的写法。

    SELECT ******
    FROM   ******
    WHERE  ******
           AND r1.attribute13 = h1.employee_num(+)

    最后面出现了小括号中间放一个加号的写法,oracle用的时候不长,不知道这是啥意思,于是摆肚一下。居然是外连接的意思,就是sql server中的left/right (outer)的意思。

    ================

    对于外连接,Oracle中可以使用“(+)”来表示,标准 sql 可以使用LEFT/RIGHT/FULL OUTER JOIN,下面将配合实例一一介绍。

    1. LEFT OUTER JOIN:左外关联
    SELECT e.last_name, e.department_id, d.department_name
    FROM employees e
    LEFT OUTER JOIN departments d
    ON (e.department_id = d.department_id);

    等价于

    SELECT e.last_name, e.department_id, d.department_name
    FROM employees e, departments d
    WHERE e.department_id=d.department_id(+);


    结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录。

    2. RIGHT OUTER JOIN:右外关联

    SELECT e.last_name, e.department_id, d.department_name
    FROM employees e
    RIGHT OUTER JOIN departments d
    ON (e.department_id = d.department_id);

    等价于

    SELECT e.last_name, e.department_id, d.department_name
    FROM employees e, departments d
    WHERE e.department_id(+)=d.department_id;

    结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录。

    3. FULL OUTER JOIN:全外关联

    SELECT e.last_name, e.department_id, d.department_name
    FROM employees e
    FULL OUTER JOIN departments d
    ON (e.department_id = d.department_id);

    结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录。说简单点就是哪边少加号放哪边。

    要说区别,只能说带括号的加号只能在 oracle 中识别,标准 sql 是不能识别的。

  • 相关阅读:
    springmvc常用注解之@Controller和@RequestMapping
    解决nginx负载均衡的session共享问题
    iOS顶部滑动菜单:FDSlideBar 与NinaPagerView
    C#中使用WeiFenLuo.WinFormsUI.Docking.dll实现窗口停靠效果
    [转]C#使用Log4Net记录日志
    ICSharpCode.SharpZipLib 开源压缩库使用示例
    WorldWind源码剖析系列:日志类Log
    [转]反射基础
    WorldWind源码剖析系列:星球球体的加载与渲染
    Vue 前端路由 vue-router
  • 原文地址:https://www.cnblogs.com/luqingfei/p/1942831.html
Copyright © 2011-2022 走看看