mysql中的左連線 內連線 右連線和全連線理解

2021-08-10 20:58:39 字數 1403 閱讀 9265

內連線(inner join)(典型的連線運算,使用像   =   或   <>   之類的比較運算子)。包括相等連線和自然連線。 內連線使用比較運算子根據每個表共有的列的值匹配兩個表中的行 

左連線(left   join   或   left   outer   join)是右左邊表中的資料為基準,若左表有資料右表沒有資料,否則顯示左表中的資料右表中的資料顯示為空 

右連線(right  join  或  right   outer   join)是以右邊表中的資料為基準,若右表有資料左表沒有資料,否則顯示右表中的資料左表中的資料顯示為空 

全連線( full   join   或   full   outer   join)   完整外部連線返回左表和右表中的所有行。當某行在另乙個表中沒有匹配行時,則另乙個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的資料值。 

下面用幾個例項來詳細說明 

兩個表: 

a(id,name) 

資料:(1,張三)(2,李四)(3,王五) 

b(id,name) 

資料:(1,學生)(2,老師)(4,校長) 

內連線結果: 

select a.*,b.* from a inner join b on a.id=b.id; 

1 張三 1    學生 

2 李四 2    老師 

左連線結果: 

select a.*,b.* from a left join b on a.id=b.id; 

1 張三 1    學生 

2 李四 2    老師 

3 王五 null null 

右連線結果: 

select a.*,b.* from a right join b on a.id=b.id; 

1    張三 1 學生 

2    李四 2 老師 

null null 4 校長 

全連線結果 

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

1 張三 1    學生 

2 李四 2    老師 

3 王五 null null 

null null 4 校長 

**************** 

補充:下面這種情況就會用到外連線 

比如有兩個表乙個是使用者表,乙個是交易記錄表,如果我要查詢每個使用者的交易記錄就要用到左外外連線,因為不是每個使用者都有交易記錄。 

用到左外連線後,有交易記錄的資訊就會顯示,沒有的就顯示null,就像上面我舉得例子一樣。 

如果不用外連線的話,比如【王五】沒有交易記錄的話,那麼使用者表裡的【王五】的資訊就不會顯示,就失去了查詢所有使用者交易記錄的意義了。 

**************** 

看一下結果就能明白各種連線的區別了。

mysql 內連線 左連線 右連線

記錄備忘下,初始資料如下 drop table ifexists t demo product create table ifnot exists t demo product proid int 20 proname varchar 20 price int 10 primary key proi...

mysql 內連線,左連線,右連線

本文 於 用兩個表 a table b table 關聯欄位a table.a id和b table.b id來演示一下mysql的內連線 外連線 左 外 連線 右 外 連線 全 外 連線 mysql版本 server version 5.6.31 mysql community server gp...

Mysql內連線 左連線 右連線查詢

建表語句如下 建立表a table table structure for a table drop table if exists a table create table a table id smallint 6 auto increment,name varchar 10 not null,...