iT邦幫忙

0

請問 SQL 的 LEFT JOIN 是指欄位嗎?

http://webdesign.kerthis.com/sql/sql\_left\_join
上圖中的左側是指 CUSTOMERS 的左側欄位 C_ID 嗎 ?
SELECT customers.Name, orders.Order_No
FROM customers
所以這裡 LEFT JOIN 就是說 CUSTOMERS 資料表是嗎 ?
LEFT JOIN orders
ON customers.C_Id=orders.C_Id;

10
arthurliuliu
iT邦新手 5 級 ‧ 2011-09-23 08:45:43
最佳解答

tonychen168提到:
http://webdesign.kerthis.com/sql/sql\_left\_join

left join 在這個例子裡,指的是以 customers table 為主,
即便在 orders 中沒有某位客戶的訂單,也會將 customers table 的資料呈現出來。

例如:你的 customers 中有一筆資料:

C_Id Name
000005 紅海科技公司

可是 orders 中卻沒有 C_Id 為 000005 的資料,
這時候你 select 出來,仍然會看到這樣的資料:

Name Order_No
紅海科技公司 Null

大概是這樣囉。

那左側欄位如果不是設定為 C_ID , 是設定為姓名那也可以嗎 ?

C_ID 應該是 Customer 的 Primary Key, 以及 Order 的 Foreign Key
要設定成姓名也是可以, 但前提是兩邊都要有姓名這個欄位, 而且資料必須一致
不過一般在規劃資料庫的時候, 比較不會這麼搞, 除非不得已才會拿文字型態的欄位當 Primary Key

如果你兩張table都有name,當然也可以用name來串。
field name 不一樣也是可以串,
前提是兩張 table 要串的欄位要有相同意義的資料,
否則是串不出東西來的。

8
pantc328
iT邦研究生 1 級 ‧ 2011-09-23 08:30:31

資料集A跟資料集B去做聯集
CUSTOMERS 可能是Table,View,Function,Subtable....

6
fanjenfu
iT邦研究生 1 級 ‧ 2011-09-23 08:45:07

LEFT JOIN表示會以CUSTOMERS的資料為主,當orders有相同的C_ID則會有對應的Order_No,
否則Order_No會是空值.
例如
CUSTOMERS
C_ID Name
1 A
2 B
3 C
orders
C_ID Order_No
2 D
3 E
SELECT customers.Name, orders.Order_No FROM customers
LEFT JOIN orders
ON customers.C_Id=orders.C_Id
結果會是
customers.Name orders.Order_No
A
B D
C E

我要發表回答

立即登入回答