SQL连接-Oracle关联加号(+)等相关知识_第1页
SQL连接-Oracle关联加号(+)等相关知识_第2页
SQL连接-Oracle关联加号(+)等相关知识_第3页
SQL连接-Oracle关联加号(+)等相关知识_第4页
SQL连接-Oracle关联加号(+)等相关知识_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SQL连接,Oracle关联加号(+)等相关知识hebo2005:假设有 a表 id 1 2 3 4 b表 id 1 2 3 希望出来结果 a.id b.id 1 1 2 2 3 3 4 用left join 的SQL code select a.id,b.id form a left jion b on a.id=b.id用(+)的SQL code select a.id,b.id form a ,b where a.id=b.id(+)用(+)的语法简洁,容易读懂,但只是ORACLE支持,LEFT JOIN是通用的,其它没有差别zengdan84:select * from a, b where a.id = b.id; 对于外连接,Oracle中可以使用“(+)”来表示,9i可以使用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的员工记录和没有任何员工的部门记录。chensi05:说简单点就是哪边少加号放哪边wuchunyu002:外连接: 除了显示匹配相等连接条件的数据外,还可以显示某一个表中无法匹配相等连接条件的记录! - 1) 左条件(+) = 右条件 左条件所在的表必须严格进行相等连接条件的匹配,而右条件所在的表除了匹配相等连接条件外,还可以显示无法匹配连接条件的数据! 也称为右外连接. - 可以用下列语句取代: SELECT.FROM 表1 RIGHT OUTER JOIN 表2 ON 条件; 2) 左条件 = 右条件(+) 右条件所在的表必须严格进行相等连接条件的匹配,而左条件所在的表除了匹配相等连接条件外,还可以显示无法匹配连接条件的数据! 也称为左外连接. - 可以用下列语句取代: SELECT.FROM 表1 LEFT OUTER JOIN 表2 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;shenliang1985(沈亮):Oracle 建议你用在From语句后用Outer Join语法 而不是Oracle的Join操作符(+).而且(+)是要受下面的规则限制的,但Outer Join语法则不受的 1)你不可以在查询块中使用(+) 当它同时包含 join的from语句中 2)(+)只是在where语句中,并且只能对应一个表或视图的一行字段 3)如果A和B做联接时有多个条件,那么(+)必须完善所有的匹配条件, 如果没有 ,oracle不会警告你只是结果自然不同的 4)不可以在作出一个表外查询 另张表内查询的(+)联接操作 5)不可以用(+)外联接到自己 当然Self Join是可以的 6)含(+)的Where后的注意 OR不可用 IN不可用 子查询不可用 以下给些个例子:SQL code SQL desc part Name Null? Type - - - PART_ID NOT NULL VARCHAR2(4) SUPPLIER_ID VARCHAR2(4)SQL select * from part;PART SUPP- -P1 S1P2 S2P3P4SQL desc supplier Name Null? Type - - - SUPPLIER_ID NOT NULL VARCHAR2(4) SUPPLIER_NAME NOT NULL VARCHAR2(20)SQL select * from supplier;SUPP SUPPLIER_NAME- -S1 Supplier#1S2 Supplier#2S3 Supplier#3SQL select p.part_id, s.supplier_name 2 from part p, supplier s 3 where p.supplier_id = s.supplier_id (+);PART SUPPLIER_NAME- -P1 Supplier#1P2 Supplier#2P3P4-(+)是单向的SQL select p.part_id, s.supplier_name 2 from part p, supplier s 3 where p.supplier_id (+) = s.supplier_id (+);where p.supplier_id (+) = s.supplier_id (+) *ERROR at line 3:ORA-01468: a predicate may reference only one outer-joined table-实现Full Join的方法SQL select p.part_id, s.supplier_name 2 from part p, supplier s 3 where p.supplier_id = s.supplier_id (+) 4 union 5 select p.part_id, s.supplier_name 6 from part p, supplier s 7 where p.supplier_id (+) = s.supplier_id;PART SUPPLIER_NAME- -P1 Supplier#1P2 Supplier#2P3P4 Supplier#3-现在的语法 SQL select p.part_id, s.supplier_name 2 from part p full outer join supplier s 3 on p.supplier_id = s.supplier_id;PART SUPPLIER_NAME- -P1 Supplier#1P2 Supplier#2P4P3 Supplier#3另外的EG: SQL codeSQL select * from testa; ID NAME ADDR AGE- - - - 3 电子 南京 23 5 物理 北京 23 6 物理 河北 25 1 电脑 上海 23 2 电子 北京 22 4 物理 芜湖 22 7 艺术 上海 21 8 歌剧 苏州 16 9 沈亮 上海 22已选择9行。SQL select * from testb; ID ADDR- - 7 上海 1 北京 3 上海 5 合肥-匹配完全select testa.id,testa.ad

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论