关于left join (本文出处:http://www.cnblogs.com/aces/ )

declare @order table(ID int,Name varchar(20))
declare @Detail table(ID int,Price float)

insert into @order(ID,Name) values(1,'aa'),(2,'bb'),(3,'cc')
insert into @Detail(ID,Price) values(1,10.5),(2,12.3),(4,5.9)

select * from @order
select * from @Detail

关于left join (本文出处:http://www.cnblogs.com/aces/ )_第1张图片

如果运行一下:left join 的联合查询

select * from @order o left join @Detail d on o.ID=d.ID

关于left join (本文出处:http://www.cnblogs.com/aces/ )_第2张图片

运行下面的SQL

select * from @order o left join @Detail d on 1=1

关于left join (本文出处:http://www.cnblogs.com/aces/ )_第3张图片

Left join 只不过是left outer join 的缩写而已

关于cross join :笛卡尔积,就是得到多张表的乘积。

left join 与cross join 以及 inner join的结果会有什么区别

 

select * from @order o left join @Detail d on 1=1
select * from @order o inner join @Detail d on 1=1
select * from @order cross join @Detail

 

关于left join (本文出处:http://www.cnblogs.com/aces/ )_第4张图片

这里看以看出,这三种写法查询出的总行数是相同的,但是left join与inner join 及cross join执行的结果组合方式有差别,这说明他们匹配的规则是不相同的。

注意 在使用CROSS JOIN关键字交叉连接表时,因为生成的是两个表的笛卡尔积,因而不能使用ON关键字,只能在WHERE子句中定义搜索条件。

如果用两张表的nulll 列作为ON的条件会有什么结果呢?下面来看看吧:

 

declare @test table(ID int,description varchar(50))
declare @des table(ID int,Detail varchar(50))

insert into @test values(null,'aaaaaaaaa'),(null,'bbbbbbbbbbbb'),(null,'cccccccccc')
insert into @des values(null,'111'),(null,'222222'),(null,'3333333')

select * from @test
select * from @des

select * from @test t left join @des s on t.ID=s.ID
select * from @test t inner join @des s on t.ID =s.ID

 

关于left join (本文出处:http://www.cnblogs.com/aces/ )_第5张图片

 

 

 

你可能感兴趣的:(JOIN,left)