3. 外连接
外连接是指在内连接的基础上,将某个连接表中不符合连接条件的记录加入结果集。根据结果集中所包含不符合连接条件的记录来源的不同,外连接分为左外连接、右外连接、全外连接3中。
(1)左外连接
左外连接是指在内连接的基础上,将连接操作符左侧表中不符合连接条件的记录加入结果集中,与之对应的连接操作符右侧列表用NULL填充。
在Oracle数据库,左外连接的表示方式有两种。
标准SQL语句的连接方式
SELECT table1.column,table2.column[,...]
FROM table1 LEFT JOIN table2[,]
ON table1.column <operator> table2.column[,...];
Oracle扩展的连接方式
SELECT table1.column,table2.column[,...]
FROM table1,table2[,...]
ON table1.column<operator> table2.column(+)[...];
例如,查询10号部门的部门名、员工号、员工名和所有其他部门的名称,语句为
SQL>SELECT dname,empno,ename FROM dept LEFT JOIN emp
ON dept.deptno=emp.deptno AND dept.deptno=10;
或
SQL>SELECT dname,empno,ename FROM dept,emp
WHERE dept.deptno=emp.deptno(+) AND emp.deptno(+)=10;
(2)右外连接
右外连接是指在内连接的基础上,将连接操作符右侧表中不符合连接条件的记录加入结果集中,与之对应的连接操作符左侧列表用NULL填充。
标准SQL语句的连接方式:
SELECT table1.column, table2.column[,...]
FROM table1, RIGHT JOIN table2 [,...]
ON table1.column<operator> table2.column[...];
Oracle扩展的连接方式:
SELECT table1.column, table2.column[,...]
FROM table1, table2[,...]
WHERE table1.column(+)<operator> table2.column[...];
例如,查询20号部门的部门名称及其员工号、员工名,和所有其他部门的员工名、员工号,语句为
SQL>SELECT empno,ename,dname FROM dept RIGHT JOIN emp
ON dept.deptno = emp.deptno AND dept.deptno=20;
或
SQL>SELECT empno,ename,dname FROM dept, emp
WHERE dept.deptno(+) =emp.deptno AND dept.deptno(+) =20;
(3)全外连接
全外连接是指在内连接的基础上,将连接操作符两侧表中不符合连接条件的记录加入结果集中。
在Oracle数据库中,全外连接的表示方式为
SELECT table1.column,table2.column[,...]
FROM table1 FULL JOIN table2[,...]
ON table1.column1 = table2.column2[...];
例如,查询所有的部门名和员工名,语句为:
SQL>SELECT dname,ename FROM emp FULL JOIN dept ON emp.deptno = dept.deptno;
注意:(+)操作符仅适用于左外连接和右外连接,而且如果WHERE 子句中包含多个条件,则必须在所有条件中包含(+)操作符。
原文:http://my.oschina.net/douxn/blog/493696