表的连接是指在一个SQL语句中通过表与表之间的关连从一个或多个表中检索相关的数据大体上表与表之间的连接主要可分四种分别为相等连接外连接不等连接和自连接本文将主要从以下几个典型的例子来分析Oracle表的四种不同连接方式:
相等连接
通过两个表具有相同意义的列可以建立相等连接条件
只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中
例 查询员工信息以及对应的员工所在的部门信息;
SELECT*FROMEMPDEPT;
SELECT*FROMEMPDEPT
WHEREEMPDEPTNO=DEPTDEPTNO;
REM 显示工资超过的员工信息以及对应的员工的部门名称
外连接
对于外连接Oracle中可以使用(+)来表示i可以使用LEFT/RIGHT/FULL OUTER JOIN下面将配合实例一一介绍除了显示匹配相等连接条件的信息之外还显示无法匹配相等连接条件的某个表的信息
外连接采用(+)来识别
A) 左条件(+) = 右条件;
代表除了显示匹配相等连接条件的信息之外还显示右条件所在的表中无法匹配相等连接条件的信息
此时也称为右外连接另一种表示方法是:
SELECT FROM 表 RIGHT OUTER JOIN 表 ON 连接条件
B) 左条件 = 右条件(+);
代表除了显示匹配相等连接条件的信息之外还显示左条件所在的表中无法匹配相等连接条件的信息
此时也称为左外连接
SELECT FROM 表 LEFT OUTER JOIN 表 ON 连接条件
例 显示员工信息以及所对应的部门信息
无法显示没有部门的员工信息
无法显示没有员工的部门信息
SELECT*FROMEMPDEPTWHEREEMPDEPTNO=DEPTDEPTNO;
直接做相等连接:
SELECT*FROMEMPJOINDEPTONEMPDEPTNO=DEPTDEPTNO;
REM 显示员工信息以及所对应的部门信息显示没有员工的部门信息
SELECT*FROMEMPDEPTWHEREEMPDEPTNO(+)=DEPTDEPTNO;
SELECT*FROMEMPRIGHTOUTERJOINDEPTONEMPDEPTNO=DEPTDEPTNO;
REM 显示员工信息以及所对应的部门信息显示没有部门的员工信息
SELECT*FROMEMPDEPTWHEREEMPDEPTNO=DEPTDEPTNO(+);
SELECT*FROMEMPLEFTOUTERJOINDEPTONEMPDEPTNO=DEPTDEPTNO;
不等连接
两个表中的相关的两列进行不等连接比较符号一般为><BETWEEN AND
REMSALGRADE
DESCSALGRADE;
SELECT*FROMSALGRADE;
REM 显示员工的编号姓名工资以及工资所对应的级别
SELECTEMPNOENAMESALSALGRADE*FROMSALGRADEEMP
WHEREEMPSALBETWEENLOSALANDHISAL;
REM 显示雇员的编号姓名工资工资级别所在部门的名称;
SELECTEMPNOENAMESALGRADEDNAMEFROMEMPDEPTSALGRADE
WHEREEMPDEPTNO=DEPTDEPTNOANDEMPSALBETWEENLOSALANDHISAL;
自连接
自连接是数据库中经常要用的连接方式使用自连接可以将自身表的一个镜像当作另一个表来对待从而能够得到一些特殊的数据下面介绍一下自连接的方法:
将原表复制一份作为另一个表两表做笛卡儿相等连接
例 显示雇员的编号名称以及该雇员的经理名称
SELECT WORKERENAMEWORKERMGRMANAGEREMPNOMANAGERENAME FROM EMP WORKEREMP MANAGER
WHERE WORKERMGR = MANAGEREMPNO;