SQL中where和on的區別

石頭-Java 發表於 2020-11-17
SQL

where是從查詢的結果中篩選符合的記錄,on是在查詢時進行過濾,使查詢的結果只有符合條件的記錄。
定義一個學生表stu(id,name,scoreid)和一個成績表score(id,value),假設需要查詢name為張三的學生的成績。

select * from stu inner join score on stu.scoreid=score.id and stu.name='張三';

select * from stu inner join score on stu.scoreid=score.id where stu.name='張三';

來看一下兩個查詢語句的區別,為了方便理解,此處假設查詢過程中有一個臨時表來存放查詢出來的資料。第一條語句表示在獲取資料到臨時表的時候過濾掉所有不符合條件的資料,只獲取到張三的成績資料到臨時表,然後顯示出來。第二條語句則是先獲取到所有人的成績資料到臨時表,然後通過where條件從臨時表裡篩選出張三的記錄顯示出來。區別在於on條件是隻獲取到指定資料,但是where條件是先獲取到所有資料再去篩選,所以on的效率要比where高。