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

等值连接,自然连接,自连接分别是什么意思啊?
等值连接示范:
select * from sales s join titles t on s.title_id=t.title_id join publishers p on t.pub_id=p.pub_id 
在结果集中显示冗余列数据
自然连接示范:
select t.title,p.pub_name from titles t join publishers p on t.pub_id=p.pub_id
自连接示范:
select t1.title,t2.title,t1.price from titles t1 join titles t2
on t1.price=t2.price where t1.price=2.99


------解决方案--------------------
在聯機幫助上查看
------解决方案--------------------
第二条是内联接,不是自然联接
------解决方案--------------------
探讨
1\2屬於同一類型

------解决方案--------------------
再帖一边吧!

现有两张表如下,请说出如下语句的执行结果
create table T1(id int,age int)
create table T2(age int,name int)

insert into T1 select Null,Null union all
select 1,Null union all
select 1,1 union all
select 1,2 union all
select 2,1

insert into T2 select Null,Null union all
select Null,1 union all
select 1,1 union all
select 2,1 union all
select 1,2

--不使用JOIN直接双表关联,join和inner join一样只会取表中有交集的部分,注意有多条匹配的将会全列出,此外NULL在SQL Server中不被认

为有交集,
select T1.*,T2.* from T1,T2 where T1.age=T2.age
1 1 1 1
1 1 1 2
1 2 2 1
2 1 1 1
2 1 1 2
select T1.*,T2.* from T1 join T2 on T1.age=T2.age
1 1 1 1
1 1 1 2
1 2 2 1
2 1 1 1
2 1 1 2
select T1.*,T2.* from T1 inner join T2 on T1.age=T2.age
1 1 1 1
1 1 1 2
1 2 2 1
2 1 1 1
2 1 1 2
--left join是左表(T1表中)有的数据都会显示,注意对于NULL右表有多条相匹配的数据只取出第一条
select T1.*,T2.* from T1 left join T2 on T1.age=T2.age
NULL NULL NULL NULL
1 NULL NULL NULL
1 1 1 1
1 1 1 2
1 2 2 1
2 1 1 1
2 1 1 2
--right join是右表(T2表中)有的数据都会显示,注意对于NULL左表有多条相匹配的数据只取出第一条
select T1.*,T2.* from T1 right join T2 on T1.age=T2.age
NULL NULL NULL NULL
NULL NULL NULL 1
1 1 1 1
2 1 1 1
1 2 2 1
1 1 1 2
2 1 1 2
--FULL JOIN是将两表中存在的数据都取出来,不过有多条相匹配的还是只取第一条
select T1.*,T2.* from T1 FULL JOIN T2 on T1.age=T2.age
NULL NULL NULL NULL
1 NULL NULL NULL
1 1 1 1
1 1 1 2
1 2 2 1
2 1 1 1
2 1 1 2
NULL NULL NULL NULL
NULL NULL NULL 1
--CROSS JOIN脱离任何匹配,只要是表中有的数据都会被关联起来(包括NULL值),所以不能指定on关键字
select T1.*,T2.* from T1 ,T2 或select T1.*,T2.* from T1 ,T2 CROSS JOIN
NULL NULL NULL NULL
1 NULL NULL NULL
1 1 NULL NULL
1 2 NULL NULL
2 1 NULL NULL
NULL NULL NULL 1
1 NULL NULL 1
1 1 NULL 1
1 2 NULL 1
2 1 NULL 1
NULL NULL 1 1
1 NULL 1 1
1 1 1 1
1 2 1 1
2 1 1 1
NULL NULL 2 1
1 NULL 2 1
1 1 2 1
1 2 2 1
2 1 2 1
NULL NULL 1 2
1 NULL 1 2
1 1 1 2
1 2 1 2
2 1 1 2
------解决方案--------------------
去掉重复的列的等值连接叫做自然连接