前兩天面試,遇到了一道題。說的是LEFT JOIN關聯表中ON,WHERE後面跟條件的區別。
當時確實有點懵逼~經常做這種left join,inner join連接,卻發現居然只是模糊的認識。
回到家後,馬上開啟了「實踐是檢驗真理的唯一標準」模式。
三下五除二,建了兩張表嘗試起來。
首先是Person表,數據如下:
City表,數據如下:
既然是面試題是left join,那咱就試試。
從上述結果知道, left join會將左表的所有記錄都顯示出來,而在右表不匹配on條件的數據行則該列顯示為Null。
而where條件由於在left join之外,所以是對連接之後的結果再次過濾。
那這是為什麼呢??
因為資料庫在通過連接兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回。
在使用left jion時,on和where條件的區別如下:
1、on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。
2、where條件是在臨時表生成好後,再對臨時表進行過濾的條件。
這下終於「真像大白(●—●)」了。
但是,作為一個舉一反三的程序猿,怎能就這樣草草了事。
既然left join是這個結果,那就刨根問底,inner join又是咋回事呢。
通過這個例子,我們可以看到,使用on c.country='CHN'和where c.country='CHN'的結果是一樣滴。
但是過程卻不一樣。
inner join具有left和right的特性的併集,需要兩個表中的數據都符合on條件,才能被篩選出來。
到這裡,我們就明白了on和where之前的區別。
那麼right join,full join則是可以順勢推導,有興趣的朋友可以自己嘗試下。
— THE END —
猜你喜歡:
2019 MySQL8 24小時快速入門(1)
2019 MySQL8 24小時快速入門(2)