用兩個表(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
主題:內連接、左連接(左外連接)、右連接(右外連接)、全連接(全外連接)
前提
建表語句:
- CREATE TABLE `a_table` (
- `a_id` int(11) DEFAULT NULL,
- `a_name` varchar(10) DEFAULT NULL,
- `a_part` varchar(10) DEFAULT NULL
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8
- CREATE TABLE `b_table` (
- `b_id` int(11) DEFAULT NULL,
- `b_name` varchar(10) DEFAULT NULL,
- `b_part` varchar(10) DEFAULT NULL
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8
表測試數據:
一、內連接
關鍵字:inner join on說明:組合兩個表中的記錄,返回關聯字段相符的記錄,也就是返回兩個表的交集(陰影)部分。
二、左連接(左外連接)
三、右連接(右外連接)
四、全連接(全外連接)
五、補充,MySQL如何執行關聯查詢
上面的執行計劃對於單表查詢和多表關聯查詢都適用,如果是一個單表查詢,那麼只需要上面外層的基本操作。對於外連接,上面的執行過程仍然適用。例如,我們將上面的查詢語句修改如下:
outer_iter = iterator over tbl1 where col1 in (5, 6) outer_row = outer_iter.next while outer_row inner_iter = iterator over tbl2 where col3 = outer_row.col3 inner_row = inner_iter.next while inner_row output [ outer_row.col1, inner_row.col2] inner_row = inner_iter.next end outer_row = outer_iter.next end
select tbl1.col1, tbl2.col2 from tbl1 left outer join tbl2 using(col3) where tbl1.col1 in (5, 6);
說明:第五部分摘自《高性能MySQL 第三版》
outer_iter = iterator over tbl1 where col1 in (5, 6) outer_row = outer_iter.next while outer_row inner_iter = iterator over tbl2 where col3 = outer_row.col3 inner_row = inner_iter.next if inner_row while inner_row output [ outer_row.col1, inner_row.col2] inner_row = inner_iter.next end else output [ outer_row.col1, null] end outer_row = outer_iter.next end
轉載:https://blog.csdn.net/plg17/article/details/78758593