連線查詢時的where與and

2021-08-30 13:03:47 字數 733 閱讀 7814

這裡有兩條sql語句:

1.select e.employeeid,e.employeename,d.departmentname

from employee e left join department d on e.departmentid=d.departmentid and e.employeename='哈哈'

2.select e.employeeid,e.employeename,d.departmentname

from employee e left join department d on e.departmentid=d.departmentid where e.employeename='哈哈'

過去一直以為它們的結果會一樣,今天一看結果嚇了一大跳

第一句的結果為:

第二句的結果為:

可見在連線查詢中的and的作用為:只有滿足and的記錄才聯結。

而對於where,首先它的優先級別高於join,也就是說查詢語句首先會過濾不滿足條件的記錄,滿足條件的記錄再進行join

但是要這種情況只在left與right join時會產生,為inner join 時where與and一樣。

以上面的left join為例,雖然滿足條件的只有'6',但是left join時它會顯示所有employee的記錄,而只有'6'會產生join,因些其它記錄都為null

但是對於inner join,它只會顯示滿足條件的記錄,因些不會受到where或and 的影響

sql連線查詢中on篩選與where篩選的區別

sql查詢這個東西,要說它簡單,可以很簡單,通常情況下只需使用增刪查改配合程式語言的邏輯表達能力,就能實現所有功能。但是增刪查改並不能代表sql語句的所有,完整的sql功能會另人望而生畏。就拿比普通增刪查改稍微複雜乙個層次的連線查詢來說,盲目使用,也會出現意料之外的危險結果,導致程式出現莫名其妙的b...

sql連線查詢中on篩選與where篩選的區別

sql查詢這個東西,要說它簡單,可以很簡單,通常情況下只需使用增刪查改配合程式語言的邏輯表達能力,就能實現所有功能。但是增刪查改並不能代表sql語句的所有,完整的sql功能會另人望而生畏。就拿比普通增刪查改稍微複雜乙個層次的連線查詢來說,盲目使用,也會出現意料之外的危險結果,導致程式出現莫名其妙的b...

sql連線時的on和where注意事項

我們經常會通過連線來對組合多個表的資訊進行查詢,常用的left join,right join,inner join,full join等等。剛剛在使用連線查詢資料時,踩了個坑,這裡進行總結下。select a.keyword id,a.keyword value,a.keyword pv pv i...