1

我正在尝试从 MySQL 员工示例数据库中查询所有数据。(结构行数

我试图以一种保留所有表之间关系的方式来做到这一点,但我从来没有最后一次查询数据库,老实说,我迷失在联接等方面。我真的很感激任何帮助。

谢谢!


编辑:SQL:

SELECT *
FROM
    `employees`
    LEFT JOIN `salaries`
      ON `employees`.`emp_no` = `salaries`.`emp_no`
    LEFT JOIN `dept_manager`
      ON `employees`.`emp_no` = `dept_manager`.`emp_no`
    LEFT JOIN `titles`
      ON `employees`.`emp_no` = `titles`.`emp_no`,
    JOIN
      `departments` on `departments`
        ON `departments`.`dept_no` = `dept_emp`.`dept_no`

LIMIT 50;
4

2 回答 2

2

我尝试尽可能简单地解释连接。

可以说,我们必须存储一些关系信息:人员(姓名,姓氏)和分配给人员的少量电子邮件。

首先 - 我们将人员信息保存在人员表中。我们需要唯一的行标识符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 中返回的数据总是表的形式,而不是树的形式。

于 2013-02-27T15:34:27.117 回答
1

试试这个:

SELECT * from -- you can specify fields instead of *
employees e
join salaries s on e.emp_no = s.emp_no,
join titles t on e.emp_no = t.emp_no, 
join dept_emp de on e.emp_no = de.emp_no,depts,
join departments d on d.emp_no = t.emp_no,
join dept_manager dm on d.dept_no = dm.dept_no,
join employees edm on dm.emp_no = edm.emp_no -- second instance of employees to join employee who is a dept manager
于 2013-02-27T16:34:03.113 回答