我尝试尽可能简单地解释连接。
可以说,我们必须存储一些关系信息:人员(姓名,姓氏)和分配给人员的少量电子邮件。
首先 - 我们将人员信息保存在人员表中。我们需要唯一的行标识符personId
,这将允许我们在人员数据库中指向确切的人。
table persons
personId, name, surname
1, John, Foo
2, Mike, Bar
当我们有这样的表时,我们可以将人员电子邮件存储在其他表中。在这种情况下,不需要创建唯一的行标识符,但将这些行标识符存储在所有表中是一个很好的做法。PersonId 字段告诉我们谁拥有该电子邮件。
table emails
emailId, personId, address
1, 1, john.foo@company.com
2, 1, john.foo@goomail.com
3, 2, mike.bar@company.com
4, 2, mike.bar@yaaho.com
现在我们可以通过连接选择数据。
SELECT persons.Name, persons.Surname, emails.address
FROM
persons
join
emails
ON
persons.personId = emails.personId
该查询将返回数据(分配给他们地址的人)。
John, Foo, john.foo@company.com
John, Foo, john.foo@goomail.com
Mike, Bar, mike.bar@company.com
Mike, Bar, mike.bar@yaaho.com
明白了吗?
如果您不清楚连接 - 也许访问 phpcademy.org 或 thenewboston.org - 他们有关于许多语言和技术的非常好的教程,包括 SQL。
后来补充:
您还可以连接多个表,如下所示:
SELECT primarykey, key1,key2, other, fields, detail_t_1.something
FROM
master_t
JOIN
detail_t_1 on detail_t_1
ON master_t.key1 = detail_t_1.key1,
detail_t_2 on detail_t_2
ON master_t.key2 = detail_t_2.key2
后来补充:
如果有多个“详细信息”行(例如我的示例中的 2 封电子邮件) - 返回的数据将多次包含一个人,每个电子邮件地址。
在 SQL 中返回的数据总是表的形式,而不是树的形式。