技术帮
 

Oracle的内连接,左/右连接,全连接

本网站内容基本都是原创作品,未得到作者同意也欢迎转载
转载请注明出处:技术帮
说你呢,赶紧长按二维码,然后点击识别图中二维码

任何技术难题可进QQ群提问:【小崔说编程
对于提问的原则是:没有你不能问的,只有我不会答的

假设有三个数据表TESTA,TESTB,TESTC,各有A, B两列。

blob.png

这里不考虑这两个表的业务需求,只是做最纯粹的连接测试。

分别测试4种链接:内连接、左外连接、右外连接、全连接

1473058358717068189.png 内连接

内连接是最简单的连接,也是最常见的连接。

SELECT * FROM TESTA,TESTB WHERE TESTA.A=TESTB.A

查询结果如下:

blob.png


 外连接

先描述左外连接

left outer join 或 left join

左外连接就是在等值连接的基础上加上主表中的未匹配数据.

SELECT * FROM TESTA LEFT OUTER JOIN TESTB 
ON TESTA.A=TESTB.A

外连接都是使用on定义两个表之间的关系。

Oracle对于外连接支持另外一种写法:

SELECT * FROM TESTA,TESTB
WHERE TESTA.A=TESTB.A(+)

不过并不推荐这种写法,因为不是标准SQL语法,兼容性和可读性不强

该语法是9i版本之前支持的,现在已经不再推荐了。

执行结果如下:

blob.png

可以看到,左表TESTA的记录全部查询出来了,右表只有匹配的数据查询出来了。


右外连接不再赘述,只是简单的反转一下方向。

注意:外连接是应用最广的连接方式。


 全连接

全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上。

SELECT * FROM TESTA FULL OUTER JOIN TESTB
ON TESTA.A=TESTB.A

查询结果如下

blob.png