先分析一下基礎的sql語句
select * from student st LEFT JOIN score se on st.id = se.stu_id and st.gender is not null
對於該sql的,很明顯想要的業務就是,找出所有性別不是null的所有學生的成績;
結果呢....
是這樣的...分析這個結果,會發現,首先會按照所有不是null的學生張三.王五查詢其對應的成績......然後left的作用就展現了.....left是以左表爲主表,所以在沒有where條件的約束下,左表所有記錄都要展示的,右表以null值來匹配字段;
所以如果是想查詢所有性別不是null的學生的成績,應該就是
以where條件來進行約束....而不是on後面的and條件進行約束,
其實基於on後面的and條件的真是應用場景,還是不太清楚;
//後來想想這個場景是可以勉強說的通的,後期
看來後期有需要新的業務場景的時候,再來進行補充了...
其實,可以理解爲where是對整個結果出來 後進行的一個過濾條件,不知道這種解釋是否行得通,
還望大佬指正理解;