比如有兩個表,表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天下單的用戶有多少個:
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天內下單的用戶有多少個:
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天下單的用戶總共有多少個:
Or datediff(a.sign_in_date,b.order_date)=7
And(a.sign_in_date=b.order_date
Or datediff(a.sign_in_date,b.order_date)=7)
Emmm~執行結果還是一樣的。
看來在進行兩表join時,條件具體放在哪裡不用太講究;不過left
老鐵們有不同意見,跪求指教,有興趣的同學也可以試一下兩個以上的表join時,on與where有啥區別。
以上。
推薦閱讀: