sql on和where條件的使用

2021-09-24 04:12:22 字數 1167 閱讀 1526

使用join進行關聯查詢時,我們有可以使用on作為條件也可以使用where作為條件。但是兩者是不同的。

sql執行的順序on是在join之前執行where是在前面兩者之後執行。我們以乙個案例分析。

上面的sql我們對查詢條件s_id有限制,但是這個限制卻看似沒有起作用。

起不了作用是不能的,不可能不起作用的。—竊格瓦拉

我們把條件去掉

看到區別了吧。右下角的資料在第一張圖里是沒有的。

其實原因如下:

student和score表做笛卡爾積後,on條件會對這個笛卡爾積做篩選,篩選出符合sc.s_id = st.s_id and st.s_id = '01'條件的記錄。此時的結果如下:

之後進行join根據join的型別為left會保留前表未匹配的資料。也就是會補充下表方框中的資料。

以上就是問題的原因。

那有什麼辦法呢?

方案一:使用join。保留兩表完全匹配的項。結果如下

方案二:使用where條件,對join後的表進行篩選。結果如下:

sql on和where的區別

1 inner join 時查詢出來的結果相同 select a.id as channel id,a.channel name,b.op month,b.living count as living count,b.working count as working count from chann...

left join on 和where條件的放置

left join裡面帶and的查詢 select p.pname,p.pcode,s.saletime from product as p left join sales detail as s on s.pcode p.pcode and s.saletime in 2012 07 23 201...

left join on 和where條件的放置

select from tdleft join select case id as sup case id count supervise number from td kcdc case sup info group by case id sup on sup.sup case id td.cas...