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某行的值在整個表中只有一條記錄,則不返回。

 

 

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