SQL系统教程一(表之间的连接关系)

表与表的连接总体分为三类:

内连接:inner join

外连接:left join 、right join、full join、

交叉连接:cross join

下面将一一介绍

先建表a 和b

create table a (col int,coll int)
insert into a values(1,10)
insert into a values(2,20)
insert into a values(3,30)
insert into a values(4,40)
insert into a values(5,50)
go
create table b (col int,coll int)
insert into b values(1,10)
insert into b values(6,20)
insert into b values(7,30)
insert into b values(8,40)
insert into b values(2,50)

首先介绍内连接 inner join


select * from a inner join b on a.col=b.col

他返回了两个表中符合关联条件的结果

 

接下来是外连接 left outer join / right  outer join / full outer join

在实际应用中可以直接写left join 可以省掉outer。

select * from a left outer join b on a.col=b.col

他返回了左边的所有行,如果右边有匹配的值就显示,没有匹配的值就以null值返回

 

select * from a right outer join b on a.col=b.col

和左连接相返,以右表为主,返回右表的所有行,如果左表有匹配值就返回,没有匹配值以null值返回

 

select * from a full  outer join b on a.col=b.col

返回两个表的所有结果,没匹配的以null返回,相当于left join的结果加上right join的结果

 

--exec sp_dbcmptlevel dbname,80 设置数据库的兼容级别
select * from a,b where a.col*=b.col

这是左连接的简化写法。

select * from a,b where a.col=*b.col

右连接的简化写化。

在sql2000中支持,要在2005 或2008中使用请先设置数据库的兼容级别

 

接下来是交叉连接 cross join
select * from a cross join b

在不加where条件的情况下,返回两表的笛卡尔乘积a表5行,b表5行,返回25行

where a.col=b.col

加了where 条件后,和inner join的结果一样,满足条件的才会返回。和inner join的区别是,内连接必须有关联条件,而交叉连接可以不要条件。

select * from a,b where a.col=b.col

这是cross  join的简化写法。

 

另外,表和本身也可以连接使用,叫做自连接。

select * from a where coll=coll

返回coll值一样的结果,如果coll某行的值在整个表中只有一条记录,则不返回。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章