首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-09-14 
SQL中内连接,左连接,右连接个人的理解????? 很久没摸SQL语句了,最近在项目中用到了SQL,又捡起SQL中的内连

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

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

????? 先看看一个简单的例子,有两个表TableA和TableB,两个表通过TableA的b_id列和TableB的id列连接。两个的表的如图SQL中内联接,左连接,右连接个人的理解

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


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

?

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

?

内连接:

select A.id, A.value, A.b_id, B.id,B.valuefrom 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 Bwhere A.b_id = B.id

?这是查询的结果:


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

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

?

下面左连接:

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

?查询的结果:


SQL中内联接,左连接,右连接个人的理解
?我们看到查询维度是按照TableA进行的,结果集的行数和TableA的行数是一样的,每一行中,如果TableB有对应的值则显示,如果没有则为NULL。

?

再看看右连接:

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

查询结果:


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

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

?

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


SQL中内联接,左连接,右连接个人的理解
内连接的结果是蓝色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连接的个人理解,如果有不妥的地方或者大家有什么心得欢迎讨论!

热点排行