SQL中ON和WHERE的區別

2021-08-13 23:06:55 字數 1043 閱讀 5250

一直覺得自己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 ...