通过参考完整性加入表格?

时间:2017-10-07 22:28:52

标签: mysql sql

这是否意味着这种加入就像一对一关系一样?

请考虑以下表格:

Table 1    Table 2
________   ________
id  name   id  name
1   O      1   T
2   B      1   N  

SELECT Table 1.name, Table 2.name FROM Table 1, Table 2 WHERE Table 1.id = Table 2.id

只会将最后一行1 N作为已连接的行返回吗?

1 O => 1N

如果第二个表具有相同的键id,它如何工作。是否需要最后一次逃避之前的同意?

3 个答案:

答案 0 :(得分:1)

不,连接将连接所有匹配的行,因此您的查询将返回2行:

  Week Sales recent
1    1     1      8
2    2     3      6
3    3     5     10
4    4     7     14
5    5     9     12

您可以在以下SO问题中找到各种联接类型的更一般描述:What is the difference between "INNER JOIN" and "OUTER JOIN"?

答案 1 :(得分:0)

从不FROM子句中使用逗号。 始终使用正确的,明确的JOIN语法。您的查询应写为:

SELECT t1.name, t2.name
FROM Table1 t1 JOIN
     Table2 t2
     ON t1.id = t2.id;

JOIN返回所有匹配的行。没有“第一”或“最后”行的SQL概念。 SQL表代表无序集。

这很容易检查。 Here是一个演示结果的SQL小提琴。

答案 2 :(得分:0)

只是关于"约定"这可以帮助你理解" id"好一点。

" ID" ( by common convention )是一个自动编号的整数,可用于唯一地定位该表中的特定行。

每个表(按惯例)都有自己的" id"列,但这并不意味着您总是通过这些列加入。

表2可能包含"外键"这使得能够连接到Table1

"外键的命名"列(按惯例)通常是"表名"的组合。 &安培;下划线& " ID&#34 ;.因此,对您的示例进行可能的修订将是:

Table1     Table2
________   ________________________
id  name   id   table1_id  name
1   O      1000         1   T
2   B      9678         1   N  

请注意,在此示例中,Table1中的ID与Table2的ID无关,因此查询现在将是:

SELECT t1.name, t2.name
FROM Table1 t1 
INNER JOIN Table2 t2 ON t1.id = t2.table1_id;

加入遵循指定的逻辑,这里是t1.id must equal t2.table1_id。没有"第一" "最后"在那个逻辑中。连接满足指定条件的所有行。 (nb:&这可能意味着根据具体情况不会加入任何行)

在单词FROM之后不要在表名之间使用逗号。习惯于INNER JOIN,LEFT OUTER JOIN(或他们的缩写JOIN和LEFT JOIN)这样的术语,从长远来看,会更好