2014-11-24 48 views
1

聯接對非關鍵屬性的含義是什麼? 有沒有例子?加入非關鍵屬性

我只知道用另一個表的主鍵連接一個表的外鍵的情況。

這是加入關鍵屬性的情況,不是嗎?

那麼連接非關鍵屬性的情況如何?

http://en.wikipedia.org/wiki/Join_(SQL) 這裏的例子就像我上面提到的那樣。

+2

您可能想解釋爲什麼您認爲「通過非關鍵屬性進行連接」有任何特殊之處。你從哪裏得到這句話?該消息來源對這些聯合還有什麼看法? – Tomalak 2014-11-24 15:03:27

+0

請參閱[此答案](https://stackoverflow.com/a/23842061/3404097)。 – philipxy 2014-11-24 19:58:02

回答

1

我只知道用另一個表的主鍵連接一個表的外鍵的情況。

對,這是最常見和最嚴重優化的一個。但是,它不是唯一的:您可以使用連接根據任意條件「連接」到另一個表(甚至是同一個表中的行)中的行。

這裏是不等值連接的一個簡單的例子:

insert into shirt_size (size_from, size_to, size_code) values (18, 19, 'Small'); 
insert into shirt_size (size_from, size_to, size_code) values (20, 21, 'Medium'); 
insert into shirt_size (size_from, size_to, size_code) values (22, 23, 'Large'); 
insert into shirt_size (size_from, size_to, size_code) values (24, 25, 'XL'); 

SELECT g.name, s.size_code 
FROM guest g 
LEFT OUTER JOIN shirt_size s ON g.size >= s.size_from AND g.size <= s.size_to 

你可以使用BETWEEN操作的條件,以及:

SELECT g.name, s.size_code 
FROM guest g 
LEFT OUTER JOIN shirt_size s ON g.size BETWEEN s.size_from AND s.size_to 

在這兩種情況下,在非關鍵屬性結合發生在兩邊的連接條件。