表與表的連接總體分爲三類:
內連接: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某行的值在整個表中只有一條記錄,則不返回。