Sql server left join,right join和inner join的比較

Sql server left join,right join和inner join的比較
 
今天來研究一下數據庫left join 、right join 和 inner join 這三者之間的區別
 
在網上看別人的寫過的源代碼,絕大多數的應用系統開發,數據庫都會有很多的各種各樣的join,那些個表table之間join的讓人眼花繚亂的,其實一直都是一知半解的狀態,
 
因爲在公司上班也不用自己去寫SQL代碼(我這裏是指稍微大一點的正規軟件公司,很小小公司還是要自己寫sql的),因爲公司有專門的DBA,通常都是DBA他們寫好了,直接給我們存儲過程的名字讓我們去調用,
 
(下次說存儲過程吧,這是個非常重要的東西,幾乎都會用到,就像我們做ASP.NET開發一定要知道ADO.NET一樣,存儲過程這種預編譯的SQL腳本對開發是很有好處的,我想在傳智播客楊老師的基礎視頻當中只所以會在頁面層代碼裏面直接寫sql查詢語句,應該是爲了方便教學,節約時間吧)
 
廢話不多說,開始學習
 
這裏先給出一個官方的解釋:
 
left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄
right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄
inner join(等值連接) 只返回兩個表中聯結字段相等的行
是不是看的有點暈,那下面我們就自己試驗吧
 
第一步:建庫建表的過程我就省略了,
 
因爲昨天的測試有一些簡單的代碼,就直接在上面稍做修改進行測試,下面插入一點測試數據
 
[sql]  
Insert into Table1 values (1,'姚羽')  
Insert into Table1 values (2,'邊兵兵')  
Insert into Table1 values (3,'袁磊')  
Insert into Table1 values (5,'傳智博客')  
  
Insert into Table2 values (1,'姚羽')  
Insert into Table2 values (2,'柳春平')  
Insert into Table2 values (3,'張永超')  
Insert into Table2 values (4,'劉華健')  
[sql]  
Insert into Table1 values (1,'姚羽')  
Insert into Table1 values (2,'邊兵兵')  
Insert into Table1 values (3,'袁磊')  
Insert into Table1 values (5,'傳智博客')  
  
Insert into Table2 values (1,'姚羽')  
Insert into Table2 values (2,'柳春平')  
Insert into Table2 values (3,'張永超')  
Insert into Table2 values (4,'劉華健')  
 
查詢出原表的數據如下:

 
我們對比兩個table 發現,Table1 中的數據編號分別爲1、2、3、5,而Table12中的數據編號分別爲1、2、3、4,也就是說兩個表中,只有最後一條數據不一樣,分別爲Table1中id爲5的“傳智播客”和Table2中id爲4的“劉華健”是對應不上的。
好,我們繼續...
 
第二步:執行left join 的效果
[sql]  
Select * from Table1 A  
Left join Table2 B  
on A.id = B.id  
[sql]  
Select * from Table1 A  
Left join Table2 B  
on A.id = B.id  


 
(所影響的行數爲 4 行)
結果說明:
left join是以A表的記錄爲基礎的,A可以看成左表,B可以看成右表,left join是以左表爲準的.
換句話說,左表(A)的記錄將會全部表示出來,而右表(B)只會顯示符合搜索條件的記錄(例子中爲: A.id = B.id).
B表記錄不足的地方均爲NULL.
 
第三步:執行right join 的效果
[sql]  
Select * from Table1 A  
right join Table2 B  
on A.id = B.id  
[sql]  
Select * from Table1 A  
right join Table2 B  
on A.id = B.id  


 
(所影響的行數也爲 4 行)
結果說明:
仔細觀察一下,就會發現,和left join的結果剛好相反,這次是以右表(B)爲基礎的,A表不足的地方用NULL填充.
第四步:執行inner join 的效果
[sql]  
Select * from Table1 A  
inner join Table2 B  
on A.id = B.id  
[sql]  
Select * from Table1 A  
inner join Table2 B  
on A.id = B.id  


 
結果說明:
 
很明顯,這裏只顯示出了 A.id = B.id的記錄.這說明inner join並不以誰爲基礎,它只顯示符合條件的記錄.
好了,到此爲止,總算弄清楚這兩者之間的區別了,
數據庫是軟件開發的核心和基礎,一定要學好。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章