SQL中内连接,左连接,右连接个人的理解

      很久没摸SQL语句了,最近在项目中用到了SQL,又捡起SQL中的内连接,左连接,右连接温习了一下,下面谈谈对它的理解。这个例子我是用SQL Server2008做的测试。

      先看看一个简单的例子,有两个表TableA和TableB,两个表通过TableA的b_id列和TableB的id列连接。两个的表的如图

为做例子这两个表我添加了一些数据,如下图:


 

 我们看到TableA和TableB有数据的交集,用红色的线条表示出了。下面我们就看看用内连接,左连接,右连接查询出的不同结果。

 

内连接:

select A.id, A.value, A.b_id, B.id,B.value
from sales.dbo.TableA A inner join sales.dbo.TableA B on A.b_id = B.id

 或者写成下面这样,是等价的。

SELECT A.id, A.value, A.b_id, B.id,B.value 
FROM sales.dbo.TableA A,sales.dbo.TableB B
where A.b_id = B.id

 这是查询的结果:


我们可以看到查询出的结果就是连个表的交集部分。

 

下面左连接:

Select A.id, A.value, A.b_id, B.id, B.value
from sales.dbo.TableA A left outer join sales.dbo.TableB B on A.b_id = B.id

 查询的结果:



 我们看到查询维度是按照TableA进行的,结果集的行数和TableA的行数是一样的,每一行中,如果TableB有对应的值则显示,如果没有则为NULL。

 

再看看右连接:

Select A.id, A.value, A.b_id, B.id, B.value
from sales.dbo.TableA A right outer join sales.dbo.TableB B on A.b_id = B.id

查询结果:


我们看到查询维度是按照TableB进行的,结果集的行数和TableB的行数是一样的,每一行中,如果TableA有对应的值则显示,如果没有则为NULL。

 

所以内连接,左连接,右连接查询的结果用图来表示如下:



内连接的结果是蓝色C区域的部分,是两个table的数据的交集部分。

左连接是红色A区域的部分,是以TableA为维度,然后连接TableB的数据。

右连接是绿色B区域的部分,是以TableB为维度,然后连接TableA的数据。

 

 

需要说明的是,左连接和右连接的方向是相对的,我们可以这样理解:

<维度表> left outer join <事实表> on <条件>

<事实表> right outer join <维度表> on <条件>

 

所以

TableA left outer join TableB

 和

TableB right outer join TableA
 

的含义是一样的,查询出的结果也是一样的。

 

以上是我SQL连接的个人理解,如果有不妥的地方或者大家有什么心得欢迎讨论!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值