一 表結構
1.1 醫生主表
1.2 醫生服務次數表
二 left join查詢
1.1 on后面加and條件
1.1.1 sql語句
1.1.2 查詢結果
1.1.3 執行計划
1.2 把條件放在where后面
1.2.1 sql語句
1.2.2 查詢結果
1.2.3 執行計划
1.3 子查詢
1.3.1 sql語句
1.3.2 查詢結果
1.3.3 執行計划
三 總結
1.不考慮where條件下,left join 會把左表所有數據查詢出來,on及其后面的條件僅僅會影響右表的數據(符合就顯示,不符合全部為null)
2.在匹配階段,where子句的條件都不會被使用,僅在匹配階段完成以后,where子句條件才會被使用,它將從匹配階段產生的數據中檢索過濾
3.所以左連接關注的是左邊的主表數據,不應該把on后面的從表中的條件加到where后,這樣會影響原有主表中的數據
4.where后面:是先連接然生成臨時查詢結果,然后再篩選
on后面:先根據條件過濾篩選,再連接生成臨時查詢結果
5.對於條件在on加個and還是用子查詢,查詢結果是一模一樣的,至於如何使用這個需要分情況,用子查詢的話會多一個maptask,但是如果利用這個子查詢能過濾到很多數據的話,用子查詢還是比較建議的,因為不會加載太多的數據到內存中,如果過濾數據不多的情況下,建議用on后面加and條件