閱讀791 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go Linux TC 帶寬管理隊列規則
  下一篇:go