我正在尝试查询MySQL Employees示例数据库中的所有数据。 (structure和row 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;
答案 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