sql的join和where區別

join關鍵字的作用是將多個表按一定的條件聯合起來,從而可以實現從多個表中獲取數據。

推薦課程:MySQL教程

sql的join和where區別

在join后面可以接on條件和where條件,在這里我主要就是說這兩者之間的差別

建立兩張簡單的用來測試的表并添加數據,如下所示,一張表名為id_name,另一張表名為id_age

sql的join和where區別

sql的join和where區別

首先看看不添加條件——t2.age =’22’時的結果

SELECT?*?from?id_name?t1?LEFT?JOIN?id_age?t2?on?t1.id?=?t2.id

得到

sql的join和where區別

1、在這里以left join為例,首先運行where加條件——t2.age =’22’時

SELECT?*?from?id_name?t1?LEFT?JOIN?id_age?t2?on?t1.id?=?t2.id?where?t2.age?='22'

得到結果如下

sql的join和where區別

可以得到where條件是在left join操作完成后所進行的條件篩選

2、當運行on加條件——t2.age =’22’時

SELECT?*?from?id_name?t1?LEFT?JOIN?id_age?t2?on?t1.id?=?t2.id?and?t2.age?='22'

得到結果如下

sql的join和where區別

可得到on條件是在left join之前先進行條件篩選,而后才對兩個表格join操作

在這里是以left join為例,對于inner join來說由于其性質,這兩種條件得到的結果會是一樣,但中間內部過程還是有差異的

on比where起作用更早,,先根據on條件進行多表的連接操作,生成一個臨時表再通過where來篩選

那 on 和where 那個更高效呢

如果是inner join, 放on和放where產生的結果一樣, 但沒說哪個效率速度更高? 如果有outer join (left or?right),?就有區別了, 因為on生效在先, 已經提前過濾了一部分數據, 而where生效在后.

綜合一下, 感覺還是放在on里更有效率, 因為它先于where執行.
先笛卡爾積, 然后再on過濾, 如果join是inner的, 就繼續往下走, 如果join 是left join, 就把on過濾掉的左主表中的數據再添加回來; 然后再執行where里的過濾;

on中不是最終過濾, 因為后面left join還可能添加回來, 而where才是最終過濾.

只有當使用外連接(left, right)時, on 和 where 才有這個區別, 如果用inner join, 在哪里制定都一樣, 因為on 之后就是where, 中間沒有其它步驟.

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享