`
huxiaojun_198213
  • 浏览: 101143 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

转载:oracle中的内连接、外连接、左连接、右连接、全连接

阅读更多
  从两个或更多个表中组合数据的过程称为连接表。数据库管理程序从指定的表中形成行的所有组合。对于每个组合,它都测试连接条件。连接条件是带有一些约束的搜索条件。有关约束的列表,参考 SQL Reference。
  
  注意:连接条件涉及的列的数据类型不必相同;然而,这些数据类型必须能相互兼容。计算连接条件的方式与计算其他搜索条件的方式相同,并且使用相同的比较规则。
  
  如果未指定连接条件,则返回在 FROM 子句中列出的表中行的所有组合,即使这些行可能完全不相关。该结果称为这两个表的交叉积(又称为笛卡尔积)。
  
  本节中的示例基于下面两个表。这两个表只是样本数据库中表的简化形式,在样本数据库中并不存在。这tb两个表一般用来概述关于连接的重点。 SAMP_STAFF 列出未作为合同工雇用的雇员的姓名以及这些雇员的职务说明,而 SAMP_PROJECT 则列出雇员(合同工和全职人员)的姓名以及这些雇员所参与的项目。

  这些表如下:
   
  SAMP_PROJECT 表

  


    SAMP_STAFF 表

    

  
    下列示例产生两个表的交叉积。因未指定连接条件,所以给出了行的所有组合:
  
   SELECT SAMP_PROJECT.NAME,
      SAMP_PROJECT.PROJ, SAMP_STAFF.NAME, SAMP_STAFF.JOB
    FROM SAMP_PROJECT, SAMP_STAFF
  
   此语句产生下列结果:


    


两个主要的连接类型是内连接和外连接。到目前为止,所有示例中使用的都是内连接。内连接只保留交叉积中满足连接条件的那些行。如果某行在一个表中存在,但在另一个表中不存在,则结果表中不包括该信息。
  
  下列示例产生两个表的内连接。该内连接列出分配给某个项目的全职雇员信息:
  
   SELECT SAMP_PROJECT.NAME,
      SAMP_PROJECT.PROJ, SAMP_STAFF.NAME, SAMP_STAFF.JOB
    FROM SAMP_PROJECT, SAMP_STAFF
    WHERE SAMP_STAFF.NAME = SAMP_PROJECT.NAME
  
  或者,也可以指定如下内连接:
  
   SELECT SAMP_PROJECT.NAME,
      SAMP_PROJECT.PROJ, SAMP_STAFF.NAME, SAMP_STAFF.JOB
    FROM SAMP_PROJECT INNER JOIN SAMP_STAFF
     ON SAMP_STAFF.NAME = SAMP_PROJECT.NAME
  
  结果是:
   


    注意:该内连接的结果由右表和左表中姓名列的值匹配的行组成- 'Haas' 和 'Thompson' 都包括在列出所有全职雇员的 SAMP_STAFF 表中以及列出分配给某个项目的专职和合同雇员的 SAMP_PROJECT 表中。
  
  外连接是内连接和左表或右表中未包括内连接中的那些行的并集。当对两个表执行外连接时,可任意将一个表指定为左表而将另一个表指定为右表。外连接有三种类型:
  
  
  左外连接包括内连接和左表中未包括在内连接中的那些行。
  
  右外连接包括内连接和右表中未包括在内连接中的那些行。
  
  全外连接包括内连接以及左表和右表中未包括在内连接中的行。
  
  使用 SELECT 语句来指定要显示的列。在 FROM 子句中,列出后跟关键字 LEFT OUTER JOIN、RIGHT OUTER JOIN 或 FULL OUTER JOIN 的第一个表的名称。接着需要指定后跟 ON 关键字的第二个表。在 ON 关键字后面,指定表示要连接的表之间关系的连接条件。
  
  在下列示例中,将 SAMP_STAFF 指定为右表,而 SAMP_PROJECT 则被指定为左表。通过使用 LEFT OUTER JOIN,列出所有全职和合同雇员(在 SAMP_PROJECT 中列出)的姓名和项目编号,如果是全职雇员(在 SAMP_STAFF 中列出),还列出这些雇员的职位:
  
   SELECT SAMP_PROJECT.NAME, SAMP_PROJECT.PROJ,
      SAMP_STAFF.NAME, SAMP_STAFF.JOB
    FROM SAMP_PROJECT LEFT OUTER JOIN SAMP_STAFF
     ON SAMP_STAFF.NAME = SAMP_PROJECT.NAME
  
  此语句产生下列结果:
   


  所有列中都具有值的那些行是该内连接的结果。这些都是满足连接条件的行: 'Haas' 和 'Thompson' 既在 SAMP_PROJECT(左表)中列出又在 SAMP_STAFF(右表)中列出。对于不满足连接条件的行,右表的列上出现空值: 'Lutz' 和 'Walker' 都是在 SAMP_PROJECT 表中列出的合同雇员,因而未在 SAMP_STAFF 表中列出。注意:左表中的所有行都包括在结果集中。
  
  在下一个示例中,将 SAMP_STAFF 指定为右表而 SAMP_PROJECT 则被指定为左表。通过使用 RIGHT OUTER JOIN 列出所有专职雇员(在 SAMP_STAFF 中列出)的姓名和工作职位,如果将这些雇员分配给了某个项目(在 SAMP_PROJECT 中列出),还列出他们的项目编号:
  
   SELECT SAMP_PROJECT.NAME,
      SAMP_PROJECT.PROJ, SAMP_STAFF.NAME, SAMP_STAFF.JOB
    FROM SAMP_PROJECT RIGHT OUTER JOIN SAMP_STAFF
     ON SAMP_STAFF.NAME = SAMP_PROJECT.NAME
  
  结果为:
   



  像在左外连接中一样,所有列中都具有值的那些行是内连接的结果。这些都是满足连接条件的行: 'Haas'和'Thompson'既在 SAMP_PROJECT(左表)中列出又在 SAMP_STAFF(右表)中列出。对于不满足连接条件的行,右表的列上出现空值: 'Lucchessi'和'Nicholls'都是未分配项目的专职雇员。虽然他们在 SAMP_STAFF 中列出,但未在 SAMP_PROJECT 中列出。注意:右表中的所有行都包括在结果集中。
  
  下一个示例对 SAMP_PROJECT 表和 SAMP_STAFF 表使用 FULL OUTER JOIN。该示例列出所有专职雇员(包括未分配项目的雇员)和合同雇员的姓名:
  
   SELECT SAMP_PROJECT.NAME, SAMP_PROJECT.PROJ,
      SAMP_STAFF.NAME, SAMP_STAFF.JOB
    FROM SAMP_PROJECT FULL OUTER JOIN SAMP_STAFF
     ON SAMP_STAFF.NAME = SAMP_PROJECT.NAME
  
  结果为:




SQL语句实例:
(1) 右连接

     select * from ry_jbxx, ry_rxzp where ry_jbxx.gmsfhm(+) = ry_rxzp.gmsfhm

     等价

     select * from ry_jbxx right OUTER JOIN ry_rxzp on ry_jbxx.gmsfhm = ry_rxzp.gmsfhm

(2) 左连接

      select * from ry_jbxx, ry_rxzp where ry_jbxx.gmsfhm = ry_rxzp.gmsfhm(+)

      等价

     select * from ry_jbxx LEFT OUTER JOIN ry_rxzp on ry_jbxx.gmsfhm = ry_rxzp.gmsfhm

  • 大小: 2.7 KB
  • 大小: 2.7 KB
  • 大小: 39.6 KB
  • 大小: 7.4 KB
  • 大小: 9.8 KB
  • 大小: 11.4 KB
  • 大小: 14 KB
分享到:
评论

相关推荐

    oracle 左连接 右连接学习

    下面我们将详细介绍 Oracle 中的左连接、右连接、内连接、全连接和交叉连接。 左连接(Left Outer Join) 左连接是一种外连接,它返回左表中的所有记录,并将右表中的记录匹配到左表中。如果右表中没有匹配的记录...

    oracle左右连接方法

    本文将详细介绍Oracle中的左连接(Left Join)、右连接(Right Join)、内连接(Inner Join)、全连接(Full Join)以及交叉连接(Cross Join)的方法,并通过示例来帮助理解每种连接的特点。 ### 一、左连接(Left...

    oracle数据库表左连接右连接全连接的认识

    左连接和右连接的区别在于基准表的选择,左连接将左边的表作为基准表,全表数据都要显示,而右连接将右边的表作为基准表,全表数据都要显示。例如: `SELECT e.empno, e.ename, d.dname FROM emp e LEFT JOIN dept ...

    Oracle左连接,右连接.doc

    右连接也称为右外连接,它会返回右表的所有行,并且只返回左表中与右表匹配的行。如果左表中没有匹配的行,则会填充NULL值。 **语法示例:** ```sql SELECT a.studentno, a.studentname, b.classname FROM ...

    oracle数据库 左连接 右连接 自连接 。。

    例如,通过左连接和右连接的组合,可以实现全连接(Full Join),获取两个表的所有记录。同时,还可以结合使用WHERE子句和聚合函数(如COUNT, SUM, AVG等)来过滤和统计数据。 了解并熟练掌握这些连接方式,对于...

    Oracle左(外)、右(外)、全(外)、(内)连接语法与SQL标准的比较

    本文将深入探讨Oracle中的左(外)、右(外)、全(外)以及内连接的语法,并将其与SQL标准进行比较,以帮助读者更好地理解和应用这些关键概念。 ### 左(外)连接(Left Outer Join) #### SQL标准语法 左(外)连接返回左...

    oracle远程连接服务器出现 ORA-12170 TNS:连接超时 解决办法

    错误描述:oracle远程连接服务器出现 ORA-12170 TNS:连接超时 错误检查:有很多是oracle自身安装的问题,但是我这里服务器配置正常,监听正常,服务正常,远程可以ping通服务器。 这里主要是防火墙问题,解决办法: ...

    Oracle 左连接、右连接

    本篇文章将深入探讨Oracle中的左连接(LEFT JOIN)和右连接(RIGHT JOIN),这两种连接方式都是为了在不同表之间建立联系,特别是在数据不完全匹配的情况下。 首先,我们来看一下左连接(LEFT JOIN)。左连接返回左...

    理解oracle中的外连接

    右外连接与左外连接相反,返回右表的所有记录,即使在左表中没有匹配的记录。左表中没有匹配项时,结果集中的相应列将填充为NULL。这在需要查看右边数据源完整信息时很有用。 语法示例: ```sql SELECT columns ...

    Oracle左右连接及一些练习资料

    "SQL语句.pdf"可能包含了更广泛的SQL语句类型,包括各种JOIN操作,如左连接、右连接、全连接和内连接,以及子查询、联接查询等。通过这些练习,你可以提升SQL编写能力,更好地处理复杂的数据关系。 "Oracle_01.pdf...

    SQL之左连接、右连接和全连接.doc

    右连接也称为右外连接,用于从右侧表中检索记录,返回右侧表中的所有记录,并将左侧表中的匹配记录附加到右侧表中。如果左侧表中没有匹配记录,将返回空值。右连接的基本语法为: SELECT * FROM 左侧表 RIGHT JOIN ...

    sql左连接,右连接,内连接,全连接讲解

    sql左连接,右连接,内连接,全连接详细讲解

    C#中oracle连接数据库的封装类

    在C#编程环境中,Oracle数据库的连接和操作通常需要通过ADO.NET或者其他第三方库来实现。在本场景中,我们关注的是一个名为"C#中oracle连接数据库的封装类"的主题,这个主题涉及到创建一个名为`DbHelperOra.cs`的类...

    Oracle数据库左外连接

    Oracle连接有多中,我是在平常开发项目过程中用到的Oracle左连接进行了简单的阐述。

    Spring boot连接oracle数据库JDBC配置步骤

    spring.datasource.primary.url=jdbc:oracle:thin:@localhost:1521:SMARTMES spring.datasource.primary.username=system spring.datasource.primary.password=123456 spring.jpa.hibernate.ddl-auto=create ``` ...

    oracle连接需要的驱动

    1. ** Thin Driver (jdbc:oracle:thin)**:这是一种轻量级驱动,不依赖于Oracle客户端库。它直接与Oracle数据库服务器通信,适用于网络环境中的远程连接。在描述中提及的“版本为oracle 10.2.0.3.0”,这应该是...

    Oracle外连接查询

    全外连接结合了左外连接和右外连接的功能,返回两个表中的所有记录,无论是否存在匹配。如果一个表中没有匹配项,那么结果将显示另一个表的所有字段,并在没有匹配的字段处填充NULL。 除了这些外连接,还有其他类型...

Global site tag (gtag.js) - Google Analytics