一直覺得自己sql不熟練,於是開始刷sql題,發現了不懂sql中on和where的區別,搜尋結果網上幾十幾十篇的部落格互相抄 ,關鍵抄得還很迷惑。好在最後還是弄懂了。
1.首先on是用在連線join中的,它的意思是在生成連線結果的時候 偏心地 剔除掉一些不符合條件的
至於怎麼偏心,比如在left join中 它就「偏袒」左(left)邊的表 只把右邊的表中不符合條件的剔除了(置為null)
如下:
表main
表ext
可以把這兩張表看作是用來存放使用者資訊的, main放置主要資訊,ext表放置附加資訊,兩張表的關係是1對1的,以id字元作為對應關係鍵。現在我們需要將位址不為杭州的所有使用者資訊篩選出來,結果中需要包含main表和ext表的所有字段資料。
select * from main left join ext on main.id = ext.id and address <> '杭州'
閉上眼睛, 請用大腦人肉執行一下這段sql, 想象一下是什麼結果。
這個例子中劃紅線的,原左邊記錄被「偏袒」留下了,右邊的剔除了(置為null)
right join同理偏袒右(right)邊的表,但是inner join 「偏心」向中間 就和 where沒區別了。
2.而where呢,它是在生成連線結果之後,再去一整條記錄去剔除(原兩張表的內容都會被剔除)
sql中on和where的區別
資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。在使用left jion時,on和where條件的區別如下 1 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。2 where條件是在臨時表生成好後,再對臨時表...
SQL中on和where的區別
這篇部落格參考了網上的,具體哪一篇是原稿,不知道,特此宣告。資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。下面以使用left jion時,on和where條件的區別如下 1 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回...
SQL中where和on的區別
where是從查詢的結果中篩選符合的記錄,on是在查詢時進行過濾,使查詢的結果只有符合條件的記錄。定義乙個學生表stu id,name,scoreid 和乙個成績表score id,value 假設需要查詢name為張三的學生的成績。select from stu inner join score ...