Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MySQL员工样本数据库查询所有数据_Mysql_Sql_Database - Fatal编程技术网

从MySQL员工样本数据库查询所有数据

从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

我正在尝试从MySQL Employees示例数据库中查询所有数据。(及)

我试图以一种保留所有表之间关系的方式来实现这一点,但我从来没有在最后一次查询过数据库,老实说,我在连接之类的事情上迷失了方向。我真的很感激任何帮助

谢谢


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