sql where 和on 的區別

2021-07-27 11:13:59 字數 2017 閱讀 1493

今天在論壇內看到一篇 面試題,是關於where 和on 的區別的,自己也不懂,在網上搜出一篇文章,加深自己的記憶

轉資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。

在使用left jion時,on和where條件的區別如下:

1、 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。

2、where條件是在臨時表生成好後,再對臨時表進行過濾的條件。這時已經沒有left join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。

假設有兩張表:

表1:tab2 id

size 1

10

2

20

3

30

表2:tab2

size

name

10aaa

20

bbb

20

ccc

兩條sql:

1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name=』aaa』

2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name=』aaa』)

第一條sql的過程:

1、中間表

on條件:

tab1.size = tab2.size

tab1.id

tab1.size

tab2.size

tab2.name

1

10

10

aaa

2

20

20

bbb

2

20

20

ccc

3

30

(null)

(null)

| |

2、再對中間表過濾

where 條件:

tab2.name=』aaa』

tab1.id

tab1.size

tab2.size

tab2.name

1

10

10

aaa

第二條sql的過程:

1、中間表

on條件:

tab1.size = tab2.size and tab2.name=』aaa』

(條件不為真也會返回左表中的記錄)

tab1.id

tab1.size

tab2.size

tab2.name

1

10

10

aaa

2

20

(null)

(null)

3

30

(null)

(null)

其實以上結果的關鍵原因就是left join,right join,full join的特殊性,不管on上的條件是否為真都會返回left或right表中的記錄,full則具有left和right的特性的並集。 而inner jion沒這個特殊性,則條件放在on中和where中,返回的結果集是相同的

sql where 1 1和 0 1 的作用

where 1 1 這個條件始終為true,在不定數量查詢條件情況下,1 1可以很方便的規範語句。比如做查詢頁面,並且 可查詢的選項有多個,應該為 string sql select from table if equals name if equals age 如果不寫1 1呢,那麼在每乙個不為空...

SQL where條件的優化

原則,多數資料庫都是從 左到右的順序處理條件,把能過濾更多資料的條件放在前面,過濾少的條件放後面 sql1 select from employee where salary 1000 條件1,過濾的資料較少 and dept id 01 條件2,過濾的資料比條件1多 上面的sql就不符合我們的原則...

SQL WHERE 子句中的單引號

由於對sql 語句的不熟悉,在機房收費系統中乙個很的簡單問題也可能耽誤很長時間。這篇談及乙個簡單的單引號的使用。如需有條件地從表中選取資料,可將 where 子句新增到 select 語句。我開始沒在sql語句中插入單引號導致錯誤 給msgtext 加監視後 在sql server 中查詢 而加入單...