數據庫:介紹一下內聯、左聯、右聯

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

例子

table a
aid adate
1 a1
2 a2
3 a3

tableb

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 數據類型數據的字段,將會發生錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章