查询MySQL员工示例数据库中的所有数据

时间:2013-02-27 15:20:29

标签: mysql sql database

我正在尝试查询MySQL Employees示例数据库中的所有数据。 (structurerow counts

我试图以保留所有表之间关系的方式执行此操作,但我从来没有必要最后查询数据库,老实说,我迷失在Joins等等。我真的很感激任何帮助。

谢谢!


编辑: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;

2 个答案:

答案 0 :(得分: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中,返回的数据总是以表的形式存在,而不是树。

答案 1 :(得分: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