SQL優化大神帶你寫有趣的SQL(6) SELF JOIN的應用


大家好,我是知數堂SQL 優化班老師 網名:騎龜的兔子

今天給大家,帶來的是 SELF JOIN的應用

下面是,表結構和,INSERT 語句腳本。


 create table t0718 ( idx int, no int , val1 varchar(30), val2 varchar(10) );  insert into t0718 values( 1 ,10 ,'1 2 3' ,'11'); insert into t0718 values( 2 ,20 ,'4 5 6' ,'12'); insert into t0718 values( 3 ,30 ,'7 8 9' ,'13'); insert into t0718 values( 4 ,40 ,'4 8 9' ,'14'); insert into t0718 values( 5 ,50 ,'1 4 8' ,'15'); insert into t0718 values( 6 ,55 ,'3 2 9' ,'21'); insert into t0718 values( 7 ,13 ,'7 0 4' ,'33'); insert into t0718 values( 8 ,77 ,'1 6 9' ,'45'); insert into t0718 values( 9 ,22 ,'5 7 8' ,'23'); insert into t0718 values( 10 ,77 ,'8 0 9' ,'99');




在如上的數據中,對val1 進行查詢,如果查到了,如輸入值爲2 ,

那就返回,從下一行開始的三行數據,返回結果如下



類似這種,找出特定的值開始查出幾行數據問題,都需要一個連續的不間斷的一列,

或者如果沒有的話,需要人爲的製造出這樣的一個列,這裏爲了簡單,

把製作序列的事情去掉了,直接給出,如果不會的話,

可以參照 《SQL優化大神帶你寫有趣的SQL(5) 自定義變量的應用(1)》文章。

現在開始,進行分析,如果想得到上圖的所示的結果

第一,查出滿足條件的行,所在的唯一值,如pk,unique key ,這裏是idx

第二,拿着idx 查出大於idx 小於 等於idx+3的值,返回結果!

根據上面的思路寫SQL


第二步:拿着idx 查出大於idx 小於 等於idx+3的值,返回結果!

這裏因爲返回的是一個表的內容,所以推薦大家使用半連接



上面的SQL 理解起來,比較難!

在這裏解釋一下,exists 裏面t1表的結果集其實就是兩個值,1,6

那麼每一個t表中idx(idx 值爲1到10)比1大且小於等於4或者比6大且小於等於9的數

就是如圖所示的內容!

一個SQL 有好幾種解決方法,也可以寫成如下

在這兩個當中,讓我選的話,如果我是初學者 我會選擇第一個,因爲他可以無視JOIN之後的

結果重複性,具有通用性。但是如果我是中級以上的MySQL DBA我會選第二個,因爲我可以

熟練的掌握SQL,根據業務我會保證不會有重複值,因爲這樣更有利於性能優化,這裏涉及

一些執行計劃的分析,還有MySQL 特性問題,不再本系列討論範圍。

至於下面的SQL



雖然看似,也能得出正確的結果,但純粹是爲了得到結果而寫的沒有通用性,所以只是作爲

一個SQL多樣性,進行參考,沒有討論必要性。

謝謝大家~ 歡迎轉發

我是知數堂SQL 優化班老師~ ^^

如有關於SQL優化方面疑問和一起交流的請加 並且 @兔子@知數堂SQL優化

高性能MySQL,SQL優化羣 有葉金榮,吳炳錫 兩位大神坐鎮 :579036588

歡迎加入 知數堂大家庭。

從這期,開始還準備了,視頻,視頻地址在今日頭條,

https://www.ixigua.com/i6716134286379975176/


往期文章

1.比較有意思的SQL(1)

https://www.toutiao.com/i6707064970636427789/


2.有趣的SQL(2):兩個表沒連接條件的JOIN

https://www.toutiao.com/i6708876385844199940/


3.有意思的SQL(3) 行轉列,列轉行和複製

https://www.toutiao.com/i6711483799634444808/


4.有趣的SQL(4) 行轉列的複雜應用和優化思想

https://www.toutiao.com/i6712576799496208899/


5.SQL優化大神帶你寫有趣的SQL(5) 自定義變量的應用(1)

https://www.toutiao.com/i6713758942863819268/

大家關注下  頭條號 :SQL開發與優化

就可以看到相關視頻




葉老師的「MySQL核心優化」大課已升級到MySQL 8.0,掃碼開啓MySQL 8.0修行之旅吧


本文分享自微信公衆號 - 老葉茶館(iMySQL_WX)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章