declare @a table(a int,b int) declare @b table(a int,b int) insert @a values(1,1) insert @a values(2,2) insert @b values(1,1) insert @b values(3,3)--左: select * from @a Aa left join @b Bb on Aa.a=Bb.a --右: select * from @a Aa right join @b Bb on Aa.a=Bb.a --内 select * from @a Aa join @b Bb on Aa.a=Bb.a --外: select * from @a Aa full join @b Bb on Aa.a=Bb.a --完全 select * from @a,@b cross join 是笛卡儿乘积 就是一张表的行数乘以另一张表的行数 left join 第一张表的连接列在第二张表中没有匹配是,第二张表中的值返回null right join 第二张表的连接列在第一张表中没有匹配是,第一张表中的值返回null full join 返回两张表中的行 left join+right join inner join 只返回两张表连接列的匹配项
可以减少单个表的列,使之显得精练。主要有内联接、外联接、外键等等进行联合使用或者控制。 比如内联接: USE pubs SELECT * FROM authors AS a INNER JOIN publishers AS p ON a.city = p.city ORDER BY a.au_lname DESC
declare @a table(a int,b int)
declare @b table(a int,b int)
insert @a values(1,1)
insert @a values(2,2)
insert @b values(1,1)
insert @b values(3,3)--左:
select * from @a Aa left join @b Bb on Aa.a=Bb.a
--右:
select * from @a Aa right join @b Bb on Aa.a=Bb.a
--内
select * from @a Aa join @b Bb on Aa.a=Bb.a
--外:
select * from @a Aa full join @b Bb on Aa.a=Bb.a
--完全
select * from @a,@b
cross join 是笛卡儿乘积 就是一张表的行数乘以另一张表的行数
left join 第一张表的连接列在第二张表中没有匹配是,第二张表中的值返回null
right join 第二张表的连接列在第一张表中没有匹配是,第一张表中的值返回null
full join 返回两张表中的行 left join+right join
inner join 只返回两张表连接列的匹配项
比如内联接:
USE pubs
SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city = p.city
ORDER BY a.au_lname DESC
以A表对主键,B表为外键,对两个表的“姓名”字段建立关系后,
更新A表中的“姓名”,则B表中相应的“姓名”会自动更新...