資料庫 內聯 左聯 右聯 例項分析

2021-08-25 09:15:26 字數 2796 閱讀 7407

一.先看一些最簡單的例子

例子table a

aid adate

1 a1

2 a2

3 a3

table b

bid bdate

1 b1

2 b2

4 b4

兩個表a,b相連線,要取出id相同的字段

select * from a inner join b on a.aid = b.bid這是僅取出匹配的資料.

此時的取出的是:

1 a1 b1

2 a2 b2

那麼left join 指:

select * from a left join b on a.aid = b.bid

首先取出a表中所有資料,然後再加上與a,b匹配的的資料

此時的取出的是:

1 a1 b1

2 a2 b2

3 a3 空字元

同樣的也有right join

指的是首先取出b表中所有資料,然後再加上與a,b匹配的的資料

此時的取出的是:

1 a1 b1

2 a2 b2

4 空字元 b4

left join 或 left outer join。

左向外聯接的結果集包括 left outer 子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值

二. 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 資料型別資料的字段,將會發生錯誤。

sql 左聯 右聯 內聯的區別

如有表 a col1,col2 a,1b,1 b col1,col2 a,3c,2 內部聯接是指只返回符合聯接條件的資料,如select from a join b on a.col1 b.col1 只返回符合條件a.col1 b.col1的資料 結果如下 a,1,a,3 左外聯接不僅返回符合條件的...

SQL語句左聯 右聯 內聯的區別

關於sql語句連線的思考 create table test1 id bigint 20 not null auto increment,name varchar 20 default null,grade int 20 not null,primary key id insert into tes...

sql語句內聯 左聯 右聯的區別

今天sql操作遇到了這個問題,詳細總結一下 現資料庫裡有這樣兩個表 內聯查詢 inner join.on where sql語句 select from t user inner join t data on t user.id t data.id 結果集 列出符合條件的結果集,並不是以哪個表為主 ...