日期:2014-05-18  浏览次数:20446 次

Join用法之疑惑


Declare     @A   Table     (ID int,  
sName varchar(20)   )

Declare   @Aa   Table(ID   int,  
iPrice Decimal(18,   2))

insert   Into   @A   Values   (1,   '笔记本 ')
Insert   into   @Aa   Values   (1,   12345.30)
Insert   Into   @Aa   Values   (1,   345.52)

Select   *   from   @A
Select   *   from   @Aa

Select   *   from   @A   a   Left   Join   @Aa   b   on   a.ID   =   b.ID
Select   *   from   @A   a   right   Join   @Aa   b   on   a.ID   =   b.ID


此处的   Left   Join   与     right   Join   有何区别?



------解决方案--------------------

Select * from @A a right Join @Aa b on a.ID = b.ID
相当于
Select * from @Aa b left Join on @A a a.ID = b.ID
------解决方案--------------------
@A a Left Join @Aa b
on a.ID = b.ID -- 匹配条件

首先,返回左边@A表全部记录。
其次,右边@Aa表返回配记录 + 不匹配部分返回NULL。


@A a right Join @Aa b
on a.ID = b.ID -- 匹配条件

反之。
------解决方案--------------------
Select * from @A a Left Join @Aa b on a.ID = b.ID
将包含a中所有的记录,包含b中与a有相同ID 的记录

Select * from @A a right Join @Aa b on a.ID = b.ID
将包含b中所有的记录,包含a中与b有相同ID 的记录
------解决方案--------------------
Declare @A Table (ID int,
sName varchar(20) )

Declare @Aa Table(ID int,
iPrice Decimal(18, 2))

insert Into @A Values (2, 'ibm笔记本 ')
insert Into @A Values (1, 'ibm笔记本 ')
Insert into @Aa Values (1, 12345.30)
Insert Into @Aa Values (1, 345.52)
Insert Into @Aa Values (3, 345.52)

Select * from @A
Select * from @Aa

Select * from @A a Left Join @Aa b on a.ID = b.ID
Select * from @A a right Join @Aa b on a.ID = b.ID


A LEFT join B 是以A表数据为主,当B表没有数据与之对应时B表数据以NULL形式出现,RIGHT 反之