SQL中內連線,左連線,右連線個人的理解

2021-08-31 12:42:18 字數 1696 閱讀 7261

很久沒摸sql語句了,最近在專案中用到了sql,又撿起sql中的內連線,左連線,右連線溫習了一下,下面談談對它的理解。這個例子我是用sql server2008做的測試。

先看看乙個簡單的例子,有兩個表tablea和tableb,兩個表通過tablea的b_id列和tableb的id列連線。兩個的表的如圖

為做例子這兩個表我新增了一些資料,如下圖:

我們看到tablea和tableb有資料的交集,用紅色的線條表示出了。下面我們就看看用內連線,左連線,右連線查詢出的不同結果。

內連線:

select a.id, a.value, a.b_id, b.id,b.value

from sales.dbo.tablea a inner join sales.dbo.tablea b on a.b_id = b.id

或者寫成下面這樣,是等價的。

select a.id, a.value, a.b_id, b.id,b.value 

from sales.dbo.tablea a,sales.dbo.tableb b

where a.b_id = b.id

這是查詢的結果:

我們可以看到查詢出的結果就是連個表的交集部分。

下面左連線:

select a.id, a.value, a.b_id, b.id, b.value

from sales.dbo.tablea a left outer join sales.dbo.tableb b on a.b_id = b.id

查詢的結果:

我們看到查詢維度是按照tablea進行的,結果集的行數和tablea的行數是一樣的,每一行中,如果tableb有對應的值則顯示,如果沒有則為null。

再看看右連線:

select a.id, a.value, a.b_id, b.id, b.value

from sales.dbo.tablea a right outer join sales.dbo.tableb b on a.b_id = b.id

查詢結果:

我們看到查詢維度是按照tableb進行的,結果集的行數和tableb的行數是一樣的,每一行中,如果tablea有對應的值則顯示,如果沒有則為null。

所以內連線,左連線,右連線查詢的結果用圖來表示如下:

內連線的結果是藍色c區域的部分,是兩個table的資料的交集部分。

左連線是紅色a區域的部分,是以tablea為維度,然後連線tableb的資料。

右連線是綠色b區域的部分,是以tableb為維度,然後連線tablea的資料。

需要說明的是,左連線和右連線的方向是相對的,我們可以這樣理解:

《維度表》 left outer join 《事實表》 on 《條件》

《事實表》 right outer join 《維度表》 on 《條件》

所以

tablea left outer join tableb

tableb right outer join tablea
的含義是一樣的,查詢出的結果也是一樣的。

內連線 左連線 右連線

弄個例題,直觀一點。兩個表 表stu id name 1,jack 2,tom 3,kity 4,nono 表exam id grade 1,56 2,76 11,89 內連線 顯示兩表id匹配的 select stu.id,exam.id,stu.name,exam.grade from stu ...

內連線 左連線 右連線

1.內連線 利用內連線可獲取兩表的公共部分的記錄,即圖3的記錄集c 語句如下 select from a join b on a.aid b.bnameid 執行結果如下圖4所示 其實select from a,b where a.aid b.bnameid與select from a join b...

左連線 右連線 內連線

左連線又稱左外連線,它的主要意思就是說對於兩個表r和s,關於某一屬性將兩個表進行連線,方便展示。關聯的約束就是在on後面,例如下面的例子就是r b s b 示例 r表如下 s表如下 關於示例中的的r和s我們可以針對屬性b s b r b 做乙個連線,而左連線的話就是說即使另乙個表中沒有與之相對應的b...