小結left join以及中間表查詢(又補充了inner join的一些內容)


直接上例子:

a表

 

b表

ab表

 

一、left join 過程(以 select * from a left join ab on a.a_id = ab.a_id):

用a中的記錄根據on條件聯合ab的記錄進行篩選並做笛卡爾積,過稱為

  篩選過程:

        1、a: 1,"lige"  ab: 1,3

                  1,2

        2、a: 2,"jk"    ab:2,3

        3、a:3,"df"   ab:3,3

          4、a:4,"kk"     ab:NULL

  

  笛卡爾積:

         1、  1,"lige",1,3

        1,"lige",1,2

       2、 2,"jk",2,3

       3、 3,"df",3,3

       4、"kk",null,null

先讀a表的 1,"lige"這條記錄,然后根據條件在b表中篩選出1,3、1,2兩條記錄,做笛卡爾積,得到結果中的兩條記錄,然后依次進行下去

即為查詢的結果

二、三張表連接查詢的過程

就是在a和ab做了連接查詢得到的結果上再與b做連接查詢

select * from a left join ab on a.a_id=ab.a_id left join b on ab.b_id=b.b_id;

三、LEFT JOIN條件放ON和WHERE后的區別(圖轉自百度經驗)

 注意:條件放WHERE后時的先連接后篩選是指在根據on篩選、笛卡爾積連接(即一中的過程)之后的結果上再進行篩選!!!

 四、inner join

inner join不會保證做連接查詢的兩個表中的任何一個表中的記錄被查出來

以一中的表為例:

先進行left join

 

 

然后是inner join

 

 

可以看得出來,a和ab表進行左連接查詢時,a表中的所有記錄都被查詢出來,如果ab表中沒有符合連接查詢條件的記錄則顯示為null

而inner join 時,a表中被查詢出來的只是符合連接條件的記錄

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM