Oracle中表的四种连接方式讲解

表的连接是指在一个SQL语句中通过表与表之间的关连,从一个或多个表中检索相关的数据,大体上表与表之间的连接主要可分四种,分别为相等连接,外连接,不等连接和自连接,本文将主要从以下几个典型的例子来分析Oracle表的四种不同连接方式:

  1. 相等连接

  通过两个表具有相同意义的列,可以建立相等连接条件。

  只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中。

  例 查询员工信息以及对应的员工所在的部门信息;

  SELECT * FROM EMP,DEPT;
  SELECT * FROM EMP,DEPT
  WHERE EMP.DEPTNO = DEPT.DEPTNO;

  REM 显示工资超过2000的员工信息以及对应的员工的部门名称。

  2. 外连接

  对于外连接,Oracle中可以使用“(+)”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN,下面将配合实例一一介绍。除了显示匹配相等连接条件的信息之外,还显示无法匹配相等连接条件的某个表的信息。

  外连接采用(+)来识别。

  A) 左条件(+) = 右条件;

  代表除了显示匹配相等连接条件的信息之外,还显示右条件所在的表中无法匹配相等连接条件的信息。

  此时也称为"右外连接".另一种表示方法是:

  SELECT ... FROM 表1 RIGHT OUTER JOIN 表2 ON 连接条件

  B) 左条件 = 右条件(+);

  代表除了显示匹配相等连接条件的信息之外,还显示左条件所在的表中无法匹配相等连接条件的信息。

  此时也称为"左外连接".

  SELECT ... FROM 表1 LEFT OUTER JOIN 表2 ON 连接条件

  例 显示员工信息以及所对应的部门信息

  --无法显示没有部门的员工信息

  --无法显示没有员工的部门信息

  --SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO;

  --直接做相等连接:

  SELECT * FROM EMP JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;

  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;

  3. 不等连接

  两个表中的相关的两列进行不等连接,比较符号一般为>,<,...,BETWEEN.. AND..

  REM SALGRADE
  --DESC SALGRADE;
  --SELECT * FROM SALGRADE;

  REM 显示员工的编号,姓名,工资,以及工资所对应的级别。

  SELECT EMPNO,ENAME,SAL,SALGRADE.* FROM SALGRADE,EMP
  WHERE EMP.SAL BETWEEN LOSAL AND HISAL;

  REM 显示雇员的编号,姓名,工资,工资级别,所在部门的名称;

  SELECT EMPNO,ENAME,SAL,GRADE,DNAME FROM EMP,DEPT,SALGRADE
  WHERE EMP.DEPTNO = DEPT.DEPTNO AND EMP.SAL BETWEEN LOSAL AND HISAL;

  4. 自连接

  自连接是数据库中经常要用的连接方式,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。下面介绍一下自连接的方法:

  将原表复制一份作为另一个表,两表做笛卡儿相等连接。

  例 显示雇员的编号,名称,以及该雇员的经理名称

  SELECT WORKER.ENAME,WORKER.MGR,MANAGER.EMPNO,MANAGER.ENAME FROM EMP WORKER,EMP MANAGER

  WHERE WORKER.MGR = MANAGER.EMPNO;

时间: 2025-01-07 18:34:21

Oracle中表的四种连接方式讲解的相关文章

Oracle的四种连接方式【转载】

我们以Oracle自带的表来做例子 主要两张表:dept.emp 一个是部门,一个是员工表结构如下: emp name null? Type Empno not null number(4) ename   varchar2(10) job   varchar2(9) mgr   number(4) hiredate   date sal   number(7,2) comm   number(7,2) deptno   number(2) dept name null? Type deptno

SQL中的四种连接方式

转自:http://www.cnblogs.com/afirefly/archive/2010/10/08/1845906.html 联接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定联接条件.WHERE和HAVING子句也可以包含搜索条件,以进一步筛选联接条件所选的行.    联接可分为以下几类: 1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.     内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索

Oracle实例的3种连接方式

Oracle启动?大多人口中都说是当Oracle什么时候启动时等等 其实是错的 真正来讲 1.Oracle软件启动 2.软件去读取3份文件,然后启动数据库实例 Oracle的运行 1.软件启动 2.软件去读取3份文件 文件路径是在Oracle软件安装的根目录下的oracledata文件中 CONTROLFILE  程序控制 DATAFILE 数据文件 ONLINELOG   日志重做 软件读取完3份文件,从而数据库实例启动 Oracle公司承诺过,用本公司数据库绝对保证数据不丢失 看下图就可以明

sql四种连接方式

1.内连接(inner  join)只有两个表相匹配的行才能在结果集中显示出来2.左连接(left  join)以左表为主,左表所有的数据都会在结果集中出现,右表根据左表对应的数据显示,与左表匹配的数据会显示,没有匹配的地方会显示为空3.右连接(right  join)以右表为主,右表所有的数据都会在结果集中出现,左表根据左表对应的数据显示,与左表匹配的数据会显示,没有匹配的地方会显示为空4完全连接(full  join)完整外部联接返回左表和右表中的所有行.当某行在另一个表中没有匹配行时,则另

Oracle数据库服务器的两种连接方式

oracle提供了两种数据库连接方式,一种是专有连接方式,另一种是共享连接方式.区别在于专有连接方式是一个用户对应一个数据库服务器进程,而共享服务器连接方式是多个用户可以不定向轮流使用一个服务器进程.oracle推荐专有连接,一个session对应一个服务器进程,会减少竞争,对于较长事务很有用,但是会耗费PGA资源;共享连接方式对于事务执行时间短且服务器资源受限的系统是有利的.对于该使用哪种连接方式,自己权衡. 我们可以通过dbca设置数据库的连接方式: 当然我们也可以通过修改参数shared_

Android数据的四种存储方式

很清晰的思路,转自Android数据的四种存储方式 作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File.由于Android系统中,数据基本都是私有的的,都是存放于“data/data/程序包名”目录下,所以要实现数据共享,正确方式是使用Content Provider. SQLite: SQLite是一个轻量级的数据库,支持基本SQL语法,是常被采用

[转]深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接

深入理解SQL的四种连接-左外连接.右外连接.内连接.全连接 1.内连接(典型的连接运算,使用像 =  或 <> 之类的比较运算符).包括相等连接和自然连接.     内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行.       2.外连接.外连接可以是左向外连接.右向外连接或完整外部连接.     在 FROM子句中指定外连接时,可以由下列几组关键字中的一组指定:     1)LEFT  JOIN或LEFT

Oracle中的三种Join 方式

基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort merge join: 将两个表排序,然后再进行join. Hash join: 将两个表中较小的一个在内存中构造一个Hash 表(对Join Key),扫描另一个表,同样对Join Key进行Hash后探测是否可以join,找出与之匹配的行. 一张小表被hash在内存中.因为数据量小,所以这张小表的大多数数据已经驻入在内存中,剩下的少量数据

Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File 之 —— SQLite

本文在http://www.cnblogs.com/wisekingokok/archive/2011/09/14/2174844.html 基础上写了一个进阶的创建方式,技术能用新的就用新的. 参考了http://blog.csdn.net/liuhe688/article/details/6715983.仅供学习参考 SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大