从MySQL员工样本数据库查询所有数据
我正在尝试从MySQL Employees示例数据库中查询所有数据。(及) 我试图以一种保留所有表之间关系的方式来实现这一点,但我从来没有在最后一次查询过数据库,老实说,我在连接之类的事情上迷失了方向。我真的很感激任何帮助 谢谢从MySQL员工样本数据库查询所有数据,mysql,sql,database,Mysql,Sql,Database,我正在尝试从MySQL Employees示例数据库中查询所有数据。(及) 我试图以一种保留所有表之间关系的方式来实现这一点,但我从来没有在最后一次查询过数据库,老实说,我在连接之类的事情上迷失了方向。我真的很感激任何帮助 谢谢 编辑:SQL: SELECT * FROM `employees` LEFT JOIN `salaries` ON `employees`.`emp_no` = `salaries`.`emp_no` LEFT JOIN `dept
编辑: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;
我尽量简单地解释连接 比方说,我们必须存储一些关系信息:个人(姓名)和分配给个人的几封电子邮件 首先,我们将人员信息保存在persons表中。我们需要唯一的行标识符
personId
,这将允许我们在persons数据库中指出确切的人
table persons
personId, name, surname
1, John, Foo
2, Mike, Bar
当我们有这样的表时,我们可以将人员电子邮件存储在其他表中。在这种情况下,不需要创建唯一的行标识符,但最好将这些行标识符存储在所有表中。PersonId field告诉我们该电子邮件的所有者是谁
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
现在我们可以使用join选择数据
SELECT persons.Name, persons.Surname, emails.address
FROM
persons
join
emails
ON
persons.personId = emails.personId
该查询将返回数据(分配了地址的人员)
清楚了吗
如果您不清楚连接,可以访问phpcademy.org或newboston.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中,返回的数据总是以表的形式出现,而不是以树的形式出现。尝试以下方法:
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
抱歉,困惑了-您谈论的是提取数据,然后是连接。为什么不单独拉取每个表呢?简单地说:除非你有特定的理由不这样做,你可以用mysqldump来做,正如@BenjaminM已经提到的。我拉取整个数据库,我想返回100,一次200个结果-但我希望这些结果包含表中与所选员工相关的所有信息。我不想使用mysqldump,因为我正试图测试MySQL相对于Cassandra的性能,特别是在从多个表中选择数据方面(Cassandra实际上不必这么做)谢谢但是,如果像在这个数据库中一样,我有一个employees表(key:emp\u no)、palaries表(key:emp\u no)、dept\u emp(key:emp\u no,dept\u no)和departments(dept\u no),我将如何加入它们?这给我带来了最大的麻烦。哦,如果这有什么区别的话,dept_emp表可能有许多条目用于同一个员工。@jrdnhannah我添加了一些关于多个联接的信息。你问的另一个问题是:如果一个“主”行有许多“详细信息”行,那么你会得到许多具有重复主值的行,但是详细信息不同(请参阅我的电子邮件“返回数据”),John Foo有两次,两封不同的电子邮件。我已经尝试过了,但是带有小写“on”的行似乎导致语法错误。我仍然不知道如何从与主表无关的表中检索数据,而主表通过另一个表(例如
employees
->dept\u emp
->departments
)@JRDNHANAH请编辑问题并向您的SQL显示语法错误,我们将尝试修复它。获取“错误1064(42000):您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在第4行使用“join titles t on e.emp_no=t.emp_no,join dept_emp de on e.emp_no=de.emp_no”导致错误的是逗号。但是,部门没有emp_no-它有一个dept_id,它与dept_emp表上的dept_id相关。在更改查询的部门部分后,它工作了!好哇!非常感谢您的帮助。在添加缺少的逗号后,我应该放一些信息。祝您好运:)不是缺少逗号,而是有逗号在里面。谢谢:)我会记下答案的。
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