Oracle表连接的几种方式总结:
一、内连接
二、外连接:
1、 左外连接
2、 右外连接
3、 全连接
三、自连接
下面详细说明各种连接的用法:
一、 内连接(innerjoin/join)
内连接是一种最常见的连接,就是找出表A中和表B
中匹配的元素.
1、标准sql写法如下:
Select A.column,b.column
From Ainner join B
On a.column= b.column
其中inner通常可以省略。
2、oracle写法:
Select a.column,b.column
From a,b
Where a.column= b.column
2、举例说明:
--查看表里内容
SELECT*FROM a;
SELECT*FROM b;
我们用inner join来查询,看看是不是我们想要的结果:
SELECT a.*,b.*
FROM a
INNERJOIN b
ON a.id = b.id
果然是我们想要的结果,那么用oracle的写法呢:
SELECT a.*,b.*FROM a,b WHERE a.id = b.id
结果是完全一样的。
3、自然连接,natural join
自然连接是在两张表中寻找字段名和数据类型都相同点的字段,并自动的将他们连接起来,返回满足条件的结果,如果有多个列的字段名和类型都一致,则他们也都相当于连接条件;如果两个表存在字段名相同的列但是类型不一致,用自然连接则会报错。
举例:
SELECT*FROM a ;
SELECT*FROM b;
我用natrual join 应该把ID 和content作为连接条件,并返回一条结果:
SELECT*FROM a NATURALJOIN b;
和以下写法结果是一致的
SELECT*FROM a,b
WHERE a.id = b.id
AND a.content = b.content
二、外连接(outer join)
外连接分左外连接、右外连接和全连接。
1、 外连接写法
标准sql:左外连接
Select a.*,b.*
From a leftouter join b
On a.column= b.column
其中outer可以省略。意思就是A全部显示,找出B中匹配A的元素,如果B中没有则显示空。Oracle写法:在where条件里用”+”号,+号在哪边就表示从哪张表中匹配。如上例可以写成:
Select a.*,b.*
From a,b
Wherea.column=b.column(+)
举例:
SELECT*FROM a;
SELECT*FROM b;
我们做下a左连接B,我们可以想像,应该产生5条数据,其中2、green这条数据在B表中找不到匹配元素,则显示为空。
SELECT a.*,b.*
FROM a
LEFTJOIN b
ON a.id = b.id
同样用oracle写法,也应该得出一样的结果:
SELECT a.*,b.*FROM a,b
WHERE a.id = b.id(+)
2、 右外连接:
标准sql:
Select a.*,b.*
From aright outer join b
On a.column= b.column
Oracle写法:
Select a.*,b.*
From a,b
Where a.column(+)= b.column
基本和左外连接一样,只是匹配的表换了个位置。
3、 全外连接:
标准sql:
Select a.*,b.*
From a fullouter join b
On a.column= b.column
全外连接没有orale写法,全外连接就是左连接union右连接的集合。
举例:
SELECT*FROM a;
SELECT*FROM b;
现在我做下全连接:
SELECT a.*,b.*
FROM a FULLOUTERJOIN b
ON a.id = b.id
在看看用左连接union右连接的结果:
SELECT a.*,b.*FROM a LEFTJOIN b ON a.id = b.id
UNION
SELECT a.*,b.*FROM a RIGHTJOIN b ON a.id = b.id
比较一下,的确一摸一样。
三、自连接
把一张表当做两张表使用。
四、 其他不常用的连接:
Theta连接,也就是不等值连接,他会把等值以外的结
果展示出来。
交叉连接,又叫笛卡尔连接,也就是无条件连接,A表中的每一行和B表中的每一行组成一个结果集。
图片不传了 NND~~不能直接从word里面复制上来,比较失败!