mysql 連表查詢使用join 和 where 區別大麼? 兩個錶用 和join連線什麼區別?

時間 2021-07-13 02:08:25

1樓:

如果是inner join ,沒有區別,因為優化後都是一樣的如果是left join ,有區別,除非優化器可以通過邏輯優化判斷兩個表的結果是一樣的,否則兩個sql的執行是不一樣的

舉個例子:

這兩個都是等於4,但是只是運氣好剛好兩個是相等的2+2 =4

2*2 =4

2樓:tslilove

首先我先更正一下你的問題,實屬抱歉。根據你發的兩個查詢,問題點不在於join和where的區別大不大,例如:select 列名 from 表名1 join 表2 where 連線條件 or select 列名 from 表名1 join 表2 on 連線條件是一樣可以達到效果,你寫的select * from user a ,role b wherea.

id= b.user_id這個子句是內連線查詢,where指定a.id= b.

user_id返回結果,但是select * from user a left join role b on (a.id= b.user_id)這個子句,和前者不同的是在from子句不同,用了left join(左連線),就必須用on子句,否則就會報錯,下面用示例來演示一遍,例如我的資料庫裡有這兩張表分別是dm_dept,dw_deptrevenue_month.

左連線時用on子句

on子句

左連線時用where子句

where子句

我們發現,on子句在左連線查詢中是可以的,而where子句報錯,說明where子句在左連線查詢中用共同欄位來匹配記錄是不可行的。根據提問,我們很容易得出,where子句在內連線作為連線條件時是可以適用的,在左右連線是不可以的。本人知識淺薄,希望簡易的回答對你有幫助,希望不吝嗇指正為改!

3樓:

* 首先對於select * from 表1,表2 本質上就是乙個inner join ,而對於外連線或者內連線,在加上條件之後,查詢出來的結構肯定是一樣的。

* 第二點就是效率問題了,left join(返回左邊全部記錄,右表不滿足匹配條件的記錄對應行返回null),那麼單純的對比邏輯運算量的話,inner join 是只需要返回兩個表的交集部分,而 left join多返回了一部分左表沒有返回的資料。從邏輯運算量上看,inner比left要快。

* 第三,從演算法上來看,根據mysql文件,inner join在連線的時候,mysql會自動選擇較小的表來作為驅動表,從而達到減少迴圈次數的目的。我們在使用left join表的時候,預設是使用左表作為驅動表,那麼此時左表的大小是我們來控制的,如果控制不當,左表比較大,那麼自然迴圈次數也會變多,效率會下降。

資料庫聯表查詢時,是直接使用join好還是分別查詢到資料後自己處理較好?

sql語句背後的查詢優化提公升了應用開發的效能下限,同樣也限制了效能優化的天花板,這就是通用優化器的一體兩面。如果對自己的效能優化能力有信心,大可在應用程式中實現join任務,達到應用層 特性 感知的優化,往往比後端的建議更佳。 Shreck Ye 從查詢效率上來講,只要能用到相同的索引,效率應該是...

MySQL中2個表的查詢結果疑問

關鍵 我理解的SQL有乙個很重要的一點,是找出不同表的關係,及它們之間的連線路徑。你提供的兩張表你自己應該明確知道,student表中的ID對應的是score表中的ID,如果你能明確這點在SQL語言的中的意義就好寫了。關於你的題,自己想下簡單關係,然後寫成SQL 兩個表靠ID進行關聯,關係是stud...

Mysql表資料3萬,查詢20多分鐘還沒出結果,是為什麼?

timlcy 子查詢和t這個表做了迪卡爾積,如果兩個表資料都為3萬,那麼就是3萬乘3萬的資料量,所以很慢,建議改為join,或者full join, stubborn 查詢慢的問題,可以一般可以通過建索引來解決,對你要的字段建索引 主鍵不需要的,自帶索引 但你這個問題完全不是索引的問題。你這個v表的...