比如有兩個表,表user與表order,所含欄位分別如下:

Select count(distinct a.id)

From

(

Select id , sign_in_date

From user

)a

Join

(

Select use_id, order_date

From order

)b

On a.id=b.user_id

Where a.sign_in_date=b.order_date

把最後的on與where條件換成:

On a.id=b.user_id and a.sign_in_date=b.order_date

執行結果是沒有任何不同的,再嘗試一下別的條件,要查詢註冊第2天下單的用戶有多少個:

On a.id=b.user_id

Where a.sign_in_date=b.order_date+1

On a.id=b.user_id and a.sign_in_date=b.order_date+1

執行結果也沒有任何不同,那再嘗試一下別的條件,要查詢註冊7天內下單的用戶有多少個:

On a.id=b.user_id

Where datediff(a.sign_in_date,b.order_date)<7

On a.id=b.user_id and datediff(a.sign_in_date,b.order_date)<7

執行結果還是沒有任何不同,而且不知道是不是因為我查詢的量級較小的緣故,導致也沒有發現這幾種方式執行效率上的區別。那麼再嘗試一下別的條件,要查詢註冊當天或者註冊第7天下單的用戶總共有多少個:

On a.id=b.user_id

Where a.sign_in_date=b.order_date

Or datediff(a.sign_in_date,b.order_date)=7

On a.id=b.user_id

And(a.sign_in_date=b.order_date

Or datediff(a.sign_in_date,b.order_date)=7)

Emmm~執行結果還是一樣的。

看來在進行兩表join時,條件具體放在哪裡不用太講究;不過left

join,right join的條件就得非常講究了,放錯地方會導致結果出錯,這個正解就多了去了,大家可以自行上網搜索。

老鐵們有不同意見,跪求指教,有興趣的同學也可以試一下兩個以上的表join時,on與where有啥區別。

以上。

推薦閱讀:

相关文章