join關鍵字的作用是將多個表以一定的條件聯合起來,從而可以實現從多個表中獲取資料。
推薦課程:MySQL教學。
在join後面可以接on條件和where條件,在這裡我主要是說這兩者之間的差別
建立兩張簡單的用來測試的表並添加數據,如下所示,一張表名為id_name,另一張表名為id_age
先看看不加入條件-t2.age ='22'時的結果
SELECT * from id_name t1 LEFT JOIN id_age t2 on t1.id = t2.id
登入後複製
得到
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'
登入後複製
得到結果如下
############ #可以得到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'
登入後複製
###得到結果如下###############可得到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 , 中間沒有其它步驟.###
以上是sql的join和where差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!