关于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 的联合查询
select * from @order o left join @Detail d on o.ID=d.ID
运行下面的SQL
select * from @order o left join @Detail d on 1=1
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与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