出处:http://blog.sina.com.cn/s/blog_4b67f444010007nd.html
select * from ProductTable inner join ProductClassTable on ProductTable.ClassId=ProductClassTable.Id where exists(select Id from ProductClassTable)
select * from ProductTable inner join ProductClassTable on ProductTable.ClassId=ProductClassTable.Id where exists(select Id from ProductClassTable)
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 ----交差连接,生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配
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 ----交差连接,生成笛卡尔积-它不使用任何匹配或者选取条件,而是直接将一个数据源中的每个行与另一个数据源的每个行都一一匹配
---------------------------------------------------------
以上语句放入查询分析器查看运行结果
第一个表---------------------- 第二个表
1.内连接,只连接匹配的行查询结果
2.左
连接,左连接,包含左边表的全部行,以及右边表中全部匹配的行
3.右连接,包含右边表的全部行,以及左边表中全部匹配的行
4.全连接,包含左、右两个表的全部行,不管另外一边的表中是否存在与它们匹配的行
5.交差连接,生成笛卡尔积