論《LEFT JOIN條件放ON和WHERE後的區別》

前兩天面試,遇到了一道題。說的是LEFT JOIN關聯表中ON,WHERE後面跟條件的區別。面試

當時確實有點懵逼~常常作這種left join,inner join鏈接,卻發現竟然只是模糊的認識。數據庫

 

回到家後,立刻開啓了「實踐是檢驗真理的惟一標準」模式。blog

三下五除二,建了兩張表嘗試起來。it

 

首先是Person表,數據以下:io

 

City表,數據以下:程序

 

既然是面試題是left join,那咱就試試。im

 

從上述結果知道, left join會將左表的全部記錄都顯示出來,而在右表不匹配on條件的數據行則該列顯示爲Null。數據

而where條件因爲在left join以外,因此是對鏈接以後的結果再次過濾。img

 

那這是爲何呢??co

 

由於數據庫在經過鏈接兩張或多張表來返回記錄時,都會生成一張中間的臨時表,而後再將這張臨時表返回。

在使用left jion時,on和where條件的區別以下:

一、on條件是在生成臨時表時使用的條件,它無論on中的條件是否爲真,都會返回左邊表中的記錄。

二、where條件是在臨時表生成好後,再對臨時表進行過濾的條件。

 

這下終於「真像大白(●—●)」了。

可是,做爲一個觸類旁通的程序猿,怎能就這樣草草了事。

 

既然left join是這個結果,那就刨根問底,inner join又是咋回事呢。

 

 

經過這個例子,咱們能夠看到,使用on c.country='CHN'和where c.country='CHN'的結果是同樣滴。

可是過程卻不同。

inner join具備left和right的特性的並集,須要兩個表中的數據都符合on條件,才能被篩選出來。

到這裏,咱們就明白了on和where以前的區別。

 

那麼right join,full join則是能夠順勢推導,有興趣的朋友能夠本身嘗試下。

相關文章
相關標籤/搜索