Oracle连接<二>
2015-08-17 22:26
573 查看
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 子句中包含多个条件,则必须在所有条件中包含(+)操作符。
外连接是指在内连接的基础上,将某个连接表中不符合连接条件的记录加入结果集。根据结果集中所包含不符合连接条件的记录来源的不同,外连接分为左外连接、右外连接、全外连接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 子句中包含多个条件,则必须在所有条件中包含(+)操作符。
相关文章推荐
- oracle下载地址。
- Oracle 基本操作
- oracle里面的时间转字符串to_char(),字符串转时间to_date(),以及substr和instr的使用。
- 从Mysql转到Oracle前需了解的50件事
- 从Oracle转到Mysql前需了解的50件事
- oracle监听启不了或在服务项中没有监听,或者是连接时,适配器错误
- oracle事物提交的详细过程
- oracle学习第一弹----逻辑存储结构
- Oracle实现列的自动增长
- Oracle 学习之性能优化(一)SQL语句处理
- oracle 12541,12560,00511无监听程序, 协议适配器错误问题分析及解决方案
- 把EXCEL用程序导入到ORACLE中(SpringMVC+MyBatis)
- oracle 查看用户所在的表空间
- 客户端不能正常连接oracle,监听状态为"Not All Endpoints Registered"
- oracle学习之第一个存储过程:打印Hello World
- 安装Oracle的时候报SWAP空间不足的处理方法
- 总结下Oracle 中的Insert用法
- oracle卸载
- ArcGIS 10.1中的Desktop创建地理数据库ArcSDEForOracle
- 查询oracle表和sql数据量大小