SQL JOIN
在機房收費係統個人重構的時候,很多的功能都需要根據數據庫中的一個表中的信息,去查詢另一個表中相匹配的信息,我們用到了視圖,但是你有沒有注意到下麵的SQL語句呢?(SELECT...FROM...JOIN...ON...),接下來我們就一起來了解SQL中的JOIN.
1、什麼是JOIN?
Join是關係型數據庫係統的重要操作之一,SQL Server中包含的常用Join:內聯接、外聯接和交叉聯接等,Join用於根據兩個或者多個表中的列之間的關係,從這些表中查詢數據。
2、怎麼使用JOIN?
新建兩張表作為例子,表如下
●INNER JOIN
SQL語句
select * from T_NumA inner join T_NumB on T_NumA.aID=T_NumB.bID
結果如下
運行的結果是得到兩個表之間的交集。用右邊的圖可以看出,Inner join符合交換律:“A inner join B”,“B inner join A”一樣。
●OUTER JOIN
1)、LEFT(OUTER)JOIN和RIGHT(OUTER)JOIN
SQL語句
select * from T_NumA left outer join T_NumB on T_NumA.aID=T_NumB.bID
select * from T_NumA right outer join T_NumB on T_NumA.aID=T_NumB.bID
運行結果
LEFT:
運行的結果:產生表A的完全集,而B表中匹配的則有值,沒有匹配的則以null值取代。
RIGHT:
從運行的結果一眼就可以看出來,該聯接產生表B的完全集,而A表中匹配的則有值,沒有匹配的則以null值取代。
2)、FULL(OUTER)JOIN
SQL語句
select * from T_NumA full outer join T_NumB on T_NumA.aID=T_NumB.bID
運行結果:
由結果可知:該聯接產生A和B的並集。但是需要注意的是,對於沒有匹配的記錄,則會以null做為值。
●CROSS JOIN
SQL語句
select * from T_NumA cross join T_NumB
運行結果:
由運行結果可知:交叉聯接運行的結果就是咱們在數據庫係統原理中學的笛卡爾積(Cartesian Product),產生一個6*6=36行記錄的結果集。
3、結束語
本文章所講的聯接語句都是將不同表的列進行縱向拚接,因為在做機房收費係統個人重構的時候,隻涉及到縱向拚接表的查詢,有縱向,那麼肯定也有橫向,橫向拚接也有多種方式:Not in,Union和Intersect,這裏隻做簡單介紹,Not in是去兩個結果集的差集。Union是兩個集合的並集,會自動刪除重複的記錄,也可以用Union All來保留所有記錄行。Intersect是兩個集合的交集,即同時存在於兩個集合中的記錄。
如果有什麼不妥的地方,歡迎各位博友斧正!!!
最後更新:2017-04-03 05:40:03