連線(join)和子查詢
子查詢一般是將查詢出來的結果作為其他查詢的結果使用。例如,我們要將客戶基本資訊表中沒有任何訂單的客戶刪除掉,就可以利用子查詢先從銷售資訊表中將所有發出訂單的客戶id取出來,然後將結果傳遞給主查詢,如下所示:
delete from customerinfo
where customerid not in (select customerid from salesinfo )
使用子查詢可以一次性的完成很多邏輯上需要多個步驟才能完成的sql操作,同時也可以避免事務或者表鎖死,並且寫起來也很容易。但是,有些情況下,子查詢可以被更有效率的連線(join).. 替代。例如,假設我們要將所有沒有訂單記錄的使用者取出來,可以用下面這個查詢完成:
select * from customerinfo
where customerid not in (select customerid from salesinfo )
如果使用連線(join).. 來完成這個查詢工作,速度將會快很多。尤其是當salesinfo表中對customerid建有索引的話,效能將會更好,查詢如下:
select * from customerinfo
left join salesinfoon customerinfo.customerid=salesinfo.
customerid
where salesinfo.customerid is null
連線(join).. 之所以更有效率一些,是因為 mysql不需要在記憶體中建立臨時表來完成這個邏輯上的需要兩個步驟的查詢工作,但是對於大資料量的資料查詢不建議使用這兩者實現,因為join雖然效率較子查詢高,但他通過巢狀迴圈實現,效率不高,同時子查詢在通過臨時表實現的同時也是通過巢狀的方式實現資料匹配,所以,但資料量較大時,建議分開查詢不同的表,同時在程式中實現對資料的組合和過濾。
mysql的join連線查詢
join 聯合查詢。查詢的結果左右連線。連成一張大表。場景 一張表裡面的資訊不能滿足我們的條件這時候可以把有關聯的表連線起來。方便查詢。別名 分為表別名和列別名。因為有些資料表的表名很長並且會用很多次所以我們可以給它起乙個簡單的別名,簡便而且 也少。列別名主要是有相同欄位時可以加以區分。例如需要從兩...
mysql各種join連線查詢
注意點 在join操作中的 on where 應該放哪些條件 目前理解 on 後放2表關聯部分 where後放最終資料篩選部分 1.下圖為各種join操作的圖表解釋及sql語句 2.自測 建表資料結果如下 可以根據圖表中的sql 語句進行相關join查詢測試 3.簡單測試2個結果 測試第乙個join...
Mysql中join連線演算法和優化思路
1.看explain的結果,如果extra欄位裡面出現 block nested loop 即這時候sql查詢使用block nested loop join演算法,就意味著效能較差,不建議使用。2.join連線中盡可能使用小表做驅動表 通過下面的join語句分別分析一下幾種join連線演算法的過程...