2014-11-24 66 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 

在这两种情况下,在非关键属性结合发生在两边的连接条件。