多表查詢之內連線VS外連線

2021-09-06 05:39:49 字數 1913 閱讀 2028

在實際專案中對資料庫進行查詢是再常見不過的東西了,但是根據不同的條件查詢所用的語句也是 千差萬別的,最常見的便是資料庫中多表之間的聯合查詢。說到聯合查詢就不得不提一下查詢語句中的表連線關係。我們所用的多表查詢語句中表間關係無非有兩 種,一種為內連線(inner join),另一種為外連線(outer join)。具體細分一下外連線又可分為:左外連線(left join)、右外連線(right join)、全連線(full join),另外還常見的形式有left outer join,right outer join,full outer join。他們之間的具體關係可以下圖簡單表示:

一、對比理解inner join和 full join

對這兩個連線關係的理解我們可以借助於數學上的交並集。inner join也就是內連線,要求的是多表之間必須同時都滿足兩表之間的對接條件才能查出結果,也就是說按照對接關係(即on條件)查出的結果必須是多表之間的 交集,不滿足on條件將會被過濾掉,可以理解為數學上的add條件。out join與inner join卻恰恰相反,它所查出來的結果是兩表各自按條件查詢結果的並集,outer join的存在,相當於數學上的or條件。

二、對比理解left join和right join

left join和right join最大的區別在於它確定了以哪個表為查詢結果基準。left join確定以左邊表為基準,也就是join字元前的那張表,而right join確定以右邊表為基準,即join字元後的那張表。進行查詢時首先按照基準表的查詢結果確定記錄條數然後再根據條件查詢非基準表。具體用法以下例說 明:

表一:tableone(別名為to)

idab

ca1b1c1

a2b2

c2a3

b3c3

表二:tabletwo(別名為tt)

idde

d1e1

d2e2

d4e4

請注意兩表中的

id號的區別。

inner join:

select to.a , to.b , tt.d , tt.e fromtableone to inner join tabletwo tt on to.id=tt.id

其查詢結果為:

abde

a1b1

d1e1

a2b2

d2e2

left  join:

select to.a , to.b , tt.d ,tt.e fromtableone to left join tabletwo tt on to.id=tt.id

其查詢結果為:

abde

a1b1

d1e1

a2b2

d2e2

a3b3

null

null

right join:

select to.a , to.b , tt.d ,tt.e fromtableone to right join tabletwo tt on to.id=tt.id

其查詢結果為:

abde

a1b1

d1e1

a2b2

d2e2

null

null

d4e4

full join:

select to.a , to.b , tt.d ,tt.e fromtableone to full join tabletwo tt on to.id=tt.id

其查詢結果為:

abde

a1b1

d1e1

a2b2

d2e2

a3b3

null

null

null

null

d4e4

MySQL多表查詢(內連線和外連線)

新建兩張表a table和b table,如果把 當作乙個集合,那麼 中的記錄就是集合中的乙個元素。表a 表b 1.內連線 只有一種場景 select a.b.from a table a inner join b table b on a.a id b.b id 或select a.b.from ...

內連線vs外連線

內連線 合併具有同一列的兩個以上的表的行,結果集中不包含乙個表與另乙個表不匹配的行。外連線 兩個表在連線的時候除了返回滿足連線條件的行以外,還返回左 右 表中不滿足連線條件的行,稱為左 右 外連線 沒有匹配的行是,相應的結果顯示為空 null 外連線的where條件語句類似於內連線條件語句,但是連線...

資料庫多表連線查詢 外連線和內連線

本文主要列舉兩張和三張表來講述多表連線查詢。新建兩張表 表1 student 截圖如下 表2 course 截圖如下 此時這樣建表只是為了演示連線sql語句,當然實際開發中我們不會這樣建表,實際開發中這兩個表會有自己不同的主鍵。一 外連線 外連線可分為 左連線 右連線 完全外連線。1 左連線 lef...