前兩天工作過程中,遇到一個問題,關於join on查詢的,對於查出來的結果一直都很疑惑,這里記錄一下。
1.首先看下面這條sql查詢語句:
查詢出來的結果是25053
2.加個 o.lat = n.lat 的條件:
查詢出來的結果是15586
3.現在我們將條件改成 o.lat != n.lat,查出來的結果是不是應該顯示 25053-15586的差值呢?
我們發現結果並不是預想的那樣,而是125。奇怪,剩下的25053-15586-125 = 9342條數據哪里去了呢,怎么查詢不出來?
4.再看下面這條sql語句,我們過濾掉 o.lat和n.lat 都是空的情況:
9342!!
啊哈,原來如此,join on 會過濾掉兩邊都是空值的條件。
如果返回左表中為null的數據,可以使用left join,相反,如果返回右表中null的數據,使用right join。
inner join(可以簡寫成join),將不會返回左右表中均為null的數據。