知识大全 Oracle外连接和“+”号的用法

Posted 条件

篇首语:须知少年凌云志,曾许人间第一流。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle外连接和“+”号的用法相关的知识,希望对你有一定的参考价值。

Oracle外连接和“+”号的用法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

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

   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的员工记录

   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;

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

   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的员工记录和没有任何员工的部门记录

  外连接:

  除了显示匹配相等连接条件的数据外 还可以显示某一个表中无法匹配相等连接条件的记录!

  

   ) 左条件(+) = 右条件

  左条件所在的表必须严格进行相等连接条件的匹配 而右条件所在的表除了匹配相等连接条件外 还可以显示无法匹配连接条件的数据!

  也称为右外连接

  

  可以用下列语句取代:

  SELECT FROM 表 RIGHT OUTER JOIN 表 ON 条件;

   ) 左条件 = 右条件(+)

  右条件所在的表必须严格进行相等连接条件的匹配 而左条件所在的表除了匹配相等连接条件外 还可以显示无法匹配连接条件的数据!

  也称为左外连接

  

  可以用下列语句取代:

  SELECT FROM 表 LEFT OUTER JOIN 表 ON 条件;

  REM 除了相等连接之外 显示没有员工的部门信息

  SELECT * FROM EMP DEPT WHERE EMP DEPTNO(+) = DEPT DEPTNO;

  SELECT * FROM EMP RIGHT OUTER JOIN DEPT ON EMP DEPTNO = DEPT DEPTNO;

  REM 除了相等连接之外 显示没有部门的员工信息

  SELECT * FROM EMP DEPT WHERE EMP DEPTNO = DEPT DEPTNO(+);

  SELECT * FROM EMP LEFT OUTER JOIN DEPT ON EMP DEPTNO = DEPT DEPTNO;

  Oracle 建议你用在From语句后用Outer Join语法 而不是Oracle的Join操作符(+) 而且(+)是要受下面的规则限制的 但Outer Join语法则不受的~~

   )你不可以在查询块中使用(+) 当它同时包含 join的from语句中

   )(+)只是在where语句中 并且只能对应一个表或视图的一行字段

   )如果A和B做联接时有多个条件 那么(+)必须完善所有的匹配条件

  如果没有 oracle不会警告你~只是结果自然不同的

   )不可以在作出一个表外查询 另张表内查询的(+)联接操作~~

   )不可以用(+)外联接到自己 当然Self Join是可以的

   )含(+)的Where后的注意

  OR不可用

  IN不可用

  子查询不可用

  以下给些个例子

  SQL code

  SQL> desc part

  Name                                      Null?    Type

  

  PART_ID                                   NOT NULL VARCHAR ( )

  SUPPLIER_ID                                        VARCHAR ( )

  SQL> select * from part;

  PART SUPP

  

  P    S

  P    S

  P

  P

  SQL> desc supplier

  Name                                      Null?    Type

  

  SUPPLIER_ID                               NOT NULL VARCHAR ( )

  SUPPLIER_NAME                             NOT NULL VARCHAR ( )

  SQL> select * from supplier;

  SUPP SUPPLIER_NAME

  

  S    Supplier#

  S    Supplier#

  S    Supplier#

  SQL> select p part_id s supplier_name

     from part p supplier s

     where p supplier_id = s supplier_id (+);

  PART SUPPLIER_NAME

  

  P    Supplier#

  P    Supplier#

  P

  P

   (+)是单向的

  SQL> select p part_id s supplier_name

     from part p supplier s

     where p supplier_id (+) = s supplier_id (+);

  where p supplier_id (+) = s supplier_id (+)

  *

  ERROR at line :

  ORA : a predicate may reference only one outer joined table

   实现Full Join的方法

  SQL> select p part_id s supplier_name

     from part p supplier s

     where p supplier_id = s supplier_id (+)

     union

     select p part_id s supplier_name

     from part p supplier s

     where p supplier_id (+) = s supplier_id;

  PART SUPPLIER_NAME

  

  P    Supplier#

  P    Supplier#

  P

  P

  Supplier#

   现在的语法

  SQL> select p part_id s supplier_name

     from part p full outer join supplier s

     on p supplier_id = s supplier_id;

  PART SUPPLIER_NAME

  

  P    Supplier#

  P    Supplier#

  P

  P

  Supplier#

  另外的EG

  SQL code

  SQL> select * from testa;

  ID NAME  ADDR         AGE

  

   电子   南京          

   物理   北京          

   物理   河北          

   电脑   上海          

   电子   北京          

   物理   芜湖          

   艺术   上海          

   歌剧   苏州          

   沈亮   上海          

  已选择 行

  SQL> select * from testb;

  ID ADDR

  

   上海

   北京

   上海

   合肥

   匹配完全

  select testa id testa addr from testa testb where testa id(+)=testb id and

  testa addr(+)=testb addr;

  ID ADDR

  

   上海

  现在的Outer Join方法是Oracle i时开始引用的 ANSI标准的联接语法 现在的则比较直观 简单

cha138/Article/program/Oracle/201311/17460

相关参考

知识大全 Oracle共享连接和专用连接方式比较

Oracle共享连接和专用连接方式比较  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在专用连接方式

知识大全 连接oracle的总结(关于tnsname和监听)

该文是我连接oracle的总结特别适合于程序开发人员与oracle菜鸟  如何配置才能使客户端连到数据库要使一个客户端机器能连接oracle数据库需要在客户端机器上安装oracle

知识大全 oracle的共享连接和专用连接方式之初探

在专用连接方式中每一个连接到数据库服务器的客户端请求服务器会和客户端之间建立起连接这个连接用于专门处理该客户端的所有请求直到用户主动断开连接或网络出现中断在连接处于空闲时后台进程PMON会每隔一段时间

知识大全 Oracle版本号的格式

Oracle版本号的格式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  例如oracle    

知识大全 Oracle Designer对Oracle的连接

OracleDesigner对Oracle的连接  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 ORACLE入门之如何增加ORACLE连接数

ORACLE入门之如何增加ORACLE连接数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  OR

知识大全 通过Oracle连接管理器控制数据库连接

通过Oracle连接管理器控制数据库连接  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  为了更好

知识大全 Oracle并发连接数的设置

Oracle并发连接数的设置  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  不能连接Oracle

知识大全 .net连接oracle的3种实现方法

这篇文章介绍了net连接oracle的种实现方法有需要的朋友可以才可以一下   方式直接利用NET的oracle驱动连接安装Oracle客户端驱动包找到服务器端安装路径:E:oraclepr

知识大全 Oracle连接数过多释放机制

Oracle连接数过多释放机制  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle服务器