基礎篇,圖解MySQL 內連接、外連接、左連接、右連接、全連接

用兩個表(a_table、b_table),關聯字段a_table.a_id和b_table.b_id來演示一下MySQL的內連接、外連接( 左(外)連接、右(外)連接、全(外)連接)。

MySQL版本:Server version: 5.6.31 MySQL Community Server (GPL)

數據庫表:a_table、b_table

主題:內連接、左連接(左外連接)、右連接(右外連接)、全連接(全外連接)

前提

建表語句:

基礎篇,圖解MySQL 內連接、外連接、左連接、右連接、全連接

表測試數據:

基礎篇,圖解MySQL 內連接、外連接、左連接、右連接、全連接

一、內連接

基礎篇,圖解MySQL 內連接、外連接、左連接、右連接、全連接

說明:組合兩個表中的記錄,返回關聯字段相符的記錄,也就是返回兩個表的交集(陰影)部分。

基礎篇,圖解MySQL 內連接、外連接、左連接、右連接、全連接

二、左連接(左外連接)

基礎篇,圖解MySQL 內連接、外連接、左連接、右連接、全連接

說明:

left join 是left outer join的簡寫,它的全稱是左外連接,是外連接中的一種。

左(外)連接,左表(a_table)的記錄將會全部表示出來,而右表(b_table)只會顯示符合搜索條件的記錄。右表記錄不足的地方均為NULL。

基礎篇,圖解MySQL 內連接、外連接、左連接、右連接、全連接

三、右連接(右外連接)

基礎篇,圖解MySQL 內連接、外連接、左連接、右連接、全連接

基礎篇,圖解MySQL 內連接、外連接、左連接、右連接、全連接

四、全連接(全外連接)

MySQL目前不支持此種方式,可以用其他方式替代解決。

五、補充,MySQL如何執行關聯查詢

MySQL認為任何一個查詢都是一次“關聯”,並不僅僅是一個查詢需要到兩個表匹配才叫關聯,所以在MySQL中,每一個查詢,每一個片段(包括子查詢,甚至基於單表查詢)都可以是一次關聯。

當前MySQL關聯執行的策略很簡單:MySQL對任何關聯都執行嵌套循環關聯操作,即MySQL先在一個表中循環取出單條數據,然後在嵌套循環到下一個表中尋找匹配的行,依次下去,直到找到所有表中匹配的行為止。然後根據各個表匹配的行,返回查詢中需要的各個列。請看下面的例子中的簡單的查詢:

基礎篇,圖解MySQL 內連接、外連接、左連接、右連接、全連接

上面的執行計劃對於單表查詢和多表關聯查詢都適用,如果是一個單表查詢,那麼只需要上面外層的基本操作。對於外連接,上面的執行過程仍然適用。例如,我們將上面的查詢語句修改如下:

select tbl1.col1, tbl2.col2 from tbl1 left outer join tbl2 using(col3) where tbl1.col1 in (5, 6);

那麼,對應的偽代碼如下:

基礎篇,圖解MySQL 內連接、外連接、左連接、右連接、全連接


分享到:


相關文章: