Oracle数据库-关于外联接

转载 2007年09月22日 21:31:00
 以前在Oracle中用=(+)和(+)=来进行左外联接和右外联接;后来用SQL Server时用*=和=*进行外连接左外联接和右外联接;
  
  现在决定用SQL-92的标准方法:[OUTER] JOIN
  
  OUTER是可以省略的。
  
  LEFT OUTER JOIN 或 LEFT JOIN    表示左外联接
  RIGHT OUTER JOIN 或 RIGHT JOIN  表示左外联接
  FULL OUTER JOIN 或 FULL JOIN    表示左外联接
  
  外联接的意思不用多说,我们都懂,但是JOIN到底怎么用呢?没有找到很好的资料,只能从例子中学习了:
  
  这个例子也许没有实际意义,只是为了说明问题:
  
  CREATE TABLE orders(order_id int, firm_id int, p_id int)
  CREATE TABLE firms (firm_id int, f_name int)
  CREATE TABLE products(p_id int, p_name int)
  
  select a.order_id, b.f_name, c.p_name
  from orders a left join firms b on a.firm_id = b.firm_id
  left join products c on a.p_id = c.p_id
  
  说明:orders表是主表,先和从表firms进行左联接,再和从表products进行左联接。
  
  判断是外联接中的主表还是从表主要看from从句中各个表在LEFT JOIN或RIGHT JOIN两边的位置:LEFT JOIN左边的表是主表,RIGHT JOIN右边的表是主表;
  
  ON表达了两个表连接的条件,一般外联接是等值联接,不等值联接意义不大;
  
  在多个表的连接中,一个表既可以做主表又同时可以做从表,为了说明这个问题,我们修改以上SQL为:
  
  select a.order_id, b.f_name, c.p_name
  from orders a left join firms b on a.firm_id = b.firm_id
  right join products c on a.order_id = c.p_id
  
  这个SQL没有什么意义,但从中可以看出a表既是b的主表又是c的从表;到底怎么用,还是要根据实际情况来决定是左联接还是右联接;
  
  那天,看到了这样一个例子:
  create table tab1 (c1 int, c2 int, c3 int)
  create table tab2 (c1 int, c2 int, c3 int)
  create table tab3 (c1 int, c2 int, c3 int)
  create table tab4 (c1 int, c2 int, c3 int)
  
  SELECT *
  FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3
  left OUTER JOIN tab3 right OUTER JOIN tab4
  ON tab3.c1 = tab4.c1
  ON tab2.c3 = tab4.c3
  
  这种用法还真少见,具体怎么个意思,还在理解中...
  
  我把它改写成:
  SELECT *
  FROM tab1 left JOIN tab2 ON tab1.c3 = tab2.c3
  LEFT OUTER JOIN tab4 ON tab2.c3 = tab4.c3
  RIGHT OUTER JOIN tab3 ON tab3.c1 = tab4.c1
  
  也许它们是一个意思。
  
  我发现加个括号,看的更清楚一些(它是个嵌套)
  
  SELECT *
  FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3
  left OUTER JOIN
  (tab3 right OUTER JOIN tab4
  ON tab3.c1 = tab4.c1)
  ON tab2.c3 = tab4.c3  

内连接和外联结的区别

内连接与外连接的区别 关键字: notes 两个表的连接,是通过将一个表中的一列或者多列同另一个表中的列链接而建立起来的。用来连接两张表的表达式组成了连接条...
  • ldongwei
  • ldongwei
  • 2010年04月15日 19:54
  • 1832

内联结,外联结,全连接,交叉连接的区别

连接分为:内连接、外连接、交叉连接  一、内连接——最常用  定义:仅将两个表中满足连接条件的行组合起来作为结果集。  在内连接中,只有在两个表中匹配的行才能在结果集中出现  关键词:INNER JO...
  • qizhiqq
  • qizhiqq
  • 2016年07月18日 12:29
  • 891

sql语句_自连接_外连接_左连接_子查询_排序_分组

数据库 sql语句 分为DDL,DCL,DLL 1),DDL,data define language: 新建一个数据库 ceate创建 alter修改...
  • zoeou
  • zoeou
  • 2017年03月10日 17:45
  • 325

数据库的内连接和外连接

          内连接典型的连接用算,使用如 = ,之类的比较用算符,包括相等连接和自然连接。内连接根据各个表中共有的列来匹配表中的行!      比如用户表(M-USER)中有部门编号(BUME...
  • tang08
  • tang08
  • 2007年11月21日 11:33
  • 5821

内联接外联接 左联接右联接 举例说明

例表a aid adate 1 a1 2 a2 3 a3 表b bid bdate 1 b1 2 b2 4 b4 两个表a,b相连接,要取出id相同的字段 select * from a ,b whe...
  • lvlv526
  • lvlv526
  • 2007年03月16日 09:21
  • 1226

oracle 全外联接

1.select   a.code   ,   a.name   ,   b.code   ,   b.name     from   a,b     where   a.code   =   b.c...
  • alex197963
  • alex197963
  • 2007年08月20日 15:28
  • 747

外联接小结

1。连环多表外联接select *FROM Circuit C,Device D,ResGroup G,     PortInfo P,DevAddr A,Device B,DevAddr BAWHE...
  • utopia_wang
  • utopia_wang
  • 2007年03月05日 20:07
  • 479

外联接、自联接与联合

1 外联接1 左外联接left outer join 外联接与内联接的区别: 外联接一定会提供数据行,无论改行是能否在另一个表中找出相匹配的行。 左外联接的结果集中的NULL表示右集中没有找到与...
  • troubleisafriend
  • troubleisafriend
  • 2015年09月05日 10:40
  • 331

数据库:内联接,外联接,空值和联接

内联接:   左表的一行和右表的每一行进行比较, 如果左表的一行和右表的一行符合联接条件,则返回为结果集中的一行 ------   等效于where条件 当联接表时,创建的联接类型影响出现在结果集内...
  • zwqjoy
  • zwqjoy
  • 2015年04月13日 17:35
  • 154

外联接的基本概念

 规则:左外连接右带+右外连接左带+谁少谁带 +遇到外连接的情况,可能表中的数据为空,where条件主表要注意用 or  ,,is nullselect A.AreaName,      P.City...
  • utopia_wang
  • utopia_wang
  • 2007年03月05日 19:37
  • 642
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle数据库-关于外联接
举报原因:
原因补充:

(最多只允许输入30个字)