一、外连接
oracle 连接查询分为外链接和内连接,我们先看外连接【outer join】。oracle 的外连接查询分为:
- 左外连接 (左边的表不加限制) left outer join;
- 右外连接 (右边的表不加限制) right outer join;
- 全外连接 (左右两表都不加限制)full outer join; 通常outer关键字可省略,写成:left/right/full join 即可。
在左右连接时,通常都会以一张表如A表为基础表,该表的内容会全部显示,再加上A表和B表匹配的内容。如果A表中的数据在B表中没有记录,那么会在结果集中以空值显示。
关于外连接,也可以使用(+)来表示。关于使用(+)的一些注意事项:
- (+)操作符只能出现在where子句中,且不能与 outer join 语句同时使用。
- 使用(+)操作符执行外连接时,如果where子句中存在有多个条件,则必须在所有条件中都包含(+)操作符。
- (+)操作符值适用于列,不能用在表达式上
- (+)操作符不能与OR和IN操作符一起使用
- (+)只能用于实现左外连接和右外连接,不能用于实现全外连接。
1.左外连接--left (outer) join
左外连接是以左表为基础表,示例中以 emp 表为左表,显示所有的查询数据;以 dept 表为右表,显示与 emp 表匹配后的数据,即显示符合查询条件的数据。
用(+)操作符来实现。这个(+) 操作符可以这样理解: + 表示补充,即哪个表有+号,哪个表就是匹配表。如果 + 号写在右表,则左表就全部显示,所以为左连接。
【(+):Oracle专用的联接符,在条件中出现在左边指右外联接,出现在右边指左外联接】
2.右外连接--right (outer) join
右外连接与左外连接正好相反,它是以右表为基础表。在示例中,dept 表为右表,全部显示;emp 表为左表,显示符合查询条件的数据。emp表记录不足的地方显示为NULL。
用(+)操作符显示,即为:
红线框中为dept表中有,而emp表中没有的数据,显示为NULL。
3.全外连接--(FULL OUTER JOIN/FULL JOIN)
全外连接对左表和右表都不做限制,所有的记录均显示,两表不足的地方都为NULL。全外连接不支持(+)写法
二、内连接
内连接也叫简单连接,只返回满足条件的记录。用inner join......on.. 来标记,inner可省略。