sql中join與where做表連接的區別

在學校時,學習表連接,老師教了很多種通過join實現的表連接:內連接、外連接、自連接、多表連接、交叉連接等。
到了公司,發現公司的表連接都只有一種,而且還不是我們以前學習過的,就是用最簡單的where實現,具體如下:

--join
select * from A a join B b on a.id=b.aid;
--where
select * from A a,B b where a.id=b.aid;

一直都很納悶,既然where可以實現表連接,爲什麼會有專門用來做表連接的join…on…,下面詳細的解釋一下。
假設有兩張表:

1 tab1: 
id size 
1  10 
2  20 
3  302 tab2: 
size name 
10   AAA 
20   BBB 
20   CCC 

兩條SQL:

select * form tab1,tab2 where tab1.size = tab2.size and tab2.name='AAA';
select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name='AAA'); 

第一條SQL的過程:
1、中間表

where條件中連接條件: 
tab1.size = tab2.size 
tab1.id    tab1.size    tab2.size     tab2.name 
1             10            10           AAA 
2             20            20           BBB 
2             20            20           CCC 

2、再對中間表過濾

查詢條件: 
tab2.name='AAA' 
tab1.id       tab1.size        tab2.size     tab2.name 
1                10               10            AAA 

第二條SQL的過程:
1、中間表

on條件: 
tab1.size = tab2.size and tab2.name='AAA' 
(條件不爲真也會返回左表中的記錄) 
tab1.id      tab1.size         tab2.size       tab2.name 
1               10              10               AAA 
2               20              (null)           (null) 
3               30              (null)           (null) 

這個例子只是用了左連接,算是比較基礎了,應該不難理解;
這裏我直接下結論,就是說where獲取的虛表數據,只是join…on最基本的功能,如果需要完成比較複雜,或者說操作繁瑣的功能,還是用join關鍵字比較合適。

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