inner join 就是普通的 join ,只产生被连接的两个表满足连接条件的记录。
而 outer join ,如果第二个表没有满足连接的条件的记录,则在第二个表的对应字段填入空值,即保证生成的记录中一定有满足条件的第一个表的记录。
full join(full outer join) : 完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
--在分析器中运行看看他们的区别
declare @tbl1 table(id1 char(10) ,name1 char(10))
insert @tbl1 select
'1','a' union select
'2','b' union select
'33','d' union select
'44','e'
select '弟一','個表' union all
select * from @tbl1
declare @tbl2 table(id2 char(10),name2 char(10))
insert @tbl2 select
'1','a' union select
'2','b' union select
'55','d' union select
'66','e'
select '弟二','個表' union all
select * from @tbl2
select '内連接','記録数=','表1表2','関連の記録' union all
select * from @tbl1 as a inner join @tbl2 as b on a.id1 = b.id2 --内連接
select '左連接','','関連記録外','表1記録全有' union all
select * from @tbl1 as a left join @tbl2 as b on a.id1 = b.id2 --左連接
select '右連接','','関連記録外','表2記録全有' union all
select * from @tbl1 as a right join @tbl2 as b on a.id1 = b.id2 --右連接
select '全連接','',' 表1和表2','所有記録' union all
select * from @tbl1 as a full join @tbl2 as b on a.id1 = b.id2 --全連接
select '交差連接','記録数=','表1記録数×','表2記録数' union all
select * from @tbl1 as a cross join @tbl2 as b --交差連接