左連線,外連線,內連線區別

2021-09-02 12:44:27 字數 2606 閱讀 5709

left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄

right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄

inner join(等值連線) 只返回兩個表中聯結字段相等的行

舉例如下:

--------------------------------------------

表a記錄如下:

aid     anum

1     a20050111

2     a20050112

3     a20050113

4     a20050114

5     a20050115

表b記錄如下:

bid     bname

1     2006032401

2     2006032402

3     2006032403

4     2006032404

8     2006032408

--------------------------------------------

1.left join

sql語句如下:

select * from a

left join b

on a.aid = b.bid

結果如下:

aid     anum     bid     bname

1     a20050111    1     2006032401

2     a20050112    2     2006032402

3     a20050113    3     2006032403

4     a20050114    4     2006032404

5     a20050115    null     null

(所影響的行數為 5 行)

結果說明:

left join是以a表的記錄為基礎的,a可以看成左表,b可以看成右表,left join是以左表為準的.

換句話說,左表(a)的記錄將會全部表示出來,而右表(b)只會顯示符合搜尋條件的記錄(例子中為: a.aid = b.bid).

b表記錄不足的地方均為null.

--------------------------------------------

2.right join

sql語句如下:

select * from a

right join b

on a.aid = b.bid

結果如下:

aid     anum     bid     bname

1     a20050111    1     2006032401

2     a20050112    2     2006032402

3     a20050113    3     2006032403

4     a20050114    4     2006032404

null     null     8     2006032408

(所影響的行數為 5 行)

結果說明:

仔細觀察一下,就會發現,和left join的結果剛好相反,這次是以右表(b)為基礎的,a表不足的地方用null填充.

--------------------------------------------

3.inner join

sql語句如下:

select * from a

innerjoin b

on a.aid = b.bid

結果如下:

aid     anum     bid     bname

1     a20050111    1     2006032401

2     a20050112    2     2006032402

3     a20050113    3     2006032403

4     a20050114    4     2006032404

結果說明:

很明顯,這裡只顯示出了 a.aid = b.bid的記錄.這說明inner join並不以誰為基礎,它只顯示符合條件的記錄.

--------------------------------------------

注: left join操作用於在任何的 from 子句中,組合**表的記錄。使用 left join 運算來建立乙個左邊外部聯接。左邊外部聯接將包含了從第乙個(左邊)開始的兩個表中的全部記錄,即使在第二個(右邊)表中並沒有相符值的記錄。

語法:from table1 left join table2 on table1.field1 compopr table2.field2

說明:table1, table2引數用於指定要將記錄組合的表的名稱。

field1, field2引數指定被聯接的字段的名稱。且這些字段必須有相同的資料型別及包含相同型別的資料,但它們不需要有相同的名稱。

compopr引數指定關係比較運算子:"=", "<", ">", "<=", ">=" 或 "<>"。

如果在inner join操作中要聯接包含memo 資料型別或 ole object 資料型別資料的字段,將會發生錯誤.

內連線 左外連線 右外連線區別

感覺這篇部落格寫的比較通俗易懂,就轉一下。有兩個表a和表b。表a結構如下 aid int 標識種子,主鍵,自增id aname varchar 資料情況,即用select from a出來的記錄情況如下圖1所示 圖1 a表資料 表b結構如下 bid int 標識種子,主鍵,自增id bnameid ...

內連線 左外連線 右外連線 交叉連線區別

有兩個表a和表b。表a結構如下 aid int 標識種子,主鍵,自增id aname varchar 資料情況,即用select from a出來的記錄情況如下圖1所示 圖1 a表資料 表b結構如下 bid int 標識種子,主鍵,自增id bnameid int 資料情況,即用select fro...

內連線 左外連線 右外連線 交叉連線區別

在之前,我對mssql中的內連線和外連線所得出的資料集不是很清楚。這幾天重新溫習了一下sql的書本,現在的思路應該是很清楚了,現在把自己的理解發出來給大家溫習下。希望和我一樣對sql的連線語句不太理解的朋友能夠有所幫助。發這麼菜的教程,各位大大們別笑話偶了,呵 d 有兩個表a和表b。表a結構如下 a...