1. 程式人生 > >資料庫查詢:內連線、左連線、右連線、全連線

資料庫查詢:內連線、左連線、右連線、全連線

用兩個表(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

語句:select * from a_table a inner join b_table bon a.a_id = b.b_id;

執行結果:

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

二、左連線(左外連線)

關鍵字:left join on / left outer join on
語句:select * from a_table a left join b_table bon a.a_id = b.b_id;
執行結果:


說明:
left join 是left outer join的簡寫,它的全稱是左外連線,是外連線中的一種。
左(外)連線,左表(a_table)的記錄將會全部表示出來,而右表(b_table)只會顯示符合搜尋條件的記錄。右表記錄不足的地方均為NULL。

三、右連線(右外連線)

關鍵字:right join on / right outer join on
語句:select * from a_table a right outer join b_table b on a.a_id = b.b_id;
執行結果:


說明:
right join是right outer join的簡寫,它的全稱是右外連線,是外連線中的一種。
與左(外)連線相反,右(外)連線,左表(a_table)只會顯示符合搜尋條件的記錄,而右表(b_table)的記錄將會全部表示出來。左表記錄不足的地方均為NULL。


四、全連線(oracle)

select * from t_a a full join t_b b on a.id=b.id;

等值連線(我們在看看等值連線的結果)

select * from t_a a,t_b b where a.id=b.id;
select * from t_a a join t_b b on a.id=b.id;--等值連線也可以這樣寫

注意:以前理解等值連線和完全外連線是一回事,現在看來是我理解錯了。等值連線是隻把滿足條件的兩個表的行相連,然後顯示出來。完全外連線是把匹配查詢條件的行、左表沒有匹配到的、右表沒有匹配到的都顯示出來。