Oracle表连接的几种方式总结

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里面复制上来,比较失败!

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值