1. 程式人生 > >詳解資料庫表之間的連線方式

詳解資料庫表之間的連線方式

1.內聯結也就是在兩張表的相同屬性上做的等值連線即自然連線,下面用簡明的圖例進行說明

上面是我們用到兩張表,可以看到在兩張表中的相同屬性為TNO 即為教師的職工號,那麼此時如果我們想要對李誠老師的課程進行查詢就涉及到了內聯結,內聯結的兩種寫法是:

-- 第一種寫法
select cname
from table1 inner join table2
on table1.tno=table2.tno;


-- 第二種寫法
select cname
from table1 and table2
where table1.tno=table2.tno;

第一種寫法,是標SQL的寫法, from 語句中將需要進行等值連線的表 寫在 inner join兩側,on 語句表示進行等值連線的欄位

第二種寫法,是比較常見的寫法,但是當將內聯結和where語句進行條件選擇的時候,可能會分不清哪個是連線欄位,那可是作為選擇的欄位。

2.關於外連結 OUTER JOIN

外連結也是通過on子句的聯結鍵將兩表進行聯結,並從兩張表中同時選取相應的列。再次將用到的表貼出來

ShopProduct表

Product表

select SP.SHOP_ID,SP.SHOP_NAME,SP.PRODUCT_ID,p.PRODUCT_NAME
from SHOPPRODUCT  sp RIGHT OUTER JOIN PRODUCT  p
on SP.PRODUCT_ID=p.PRODUCT_ID;

對應結果為

為什麼會出現這樣的結果呢?並且表的左下角還有兩行NULL 值

首先看一下,多出來的兩行資料是高壓鍋和圓珠筆,這兩行資料表示,高壓鍋和圓珠筆這兩種商品並沒有在任何商店中出現過,對於外連結來說,只要資料存在於某一張表當中,就能取出來,而內聯結只能取出同時存在於兩張表中的資料

那麼,那張表是主表呢?最終結果會包含主表內所有的資料

對於rightouter join這種來說,寫在右側的表是主表

對於left outer join這種來說,寫在左側的表是主表

這就可以解釋NULL的出現,因為對於高壓鍋和圓珠筆的銷售資訊在ShopProduct表中找不到