2013-02-27 65 views
0

我试图从MySQL员工示例数据库中查询所有数据。 (structurerow counts查询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; 
+0

对不起,迷惑 - 你说说提取数据,然后约联接。为什么不只是独立拉桌子? – 2013-02-27 15:23:26

+1

只需使用:http://dev.mysql.com/doc/refman/5.1/en/mysqldump。html – 2013-02-27 15:23:33

+0

除非你有一个特定的原因,否则你可以用mysqldump来做这件事,因为@BenjaminM已经提到过了。 – Raad 2013-02-27 15:24:55

回答

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 
+0

获取“ERROR 1064(42000):你的SQL语法错误;查看与你的MySQL服务器版本相对应的手册,查看正确的语法,以便在'连接标题t'附近使用e.emp_no = t.emp_no, 加入e.emp_no = de.emp_no,'在第4行'dept_emp de – jrdn 2013-02-27 16:44:19

+0

这是导致错误的逗号。但是,部门没有emp_no - 它有一个dept_id,它与dept_emp表上的dept_id有关。 – jrdn 2013-02-27 16:49:58

+0

并且在改变查询的部门部分之后它的工作原理!欢呼!非常感谢您的帮助。 – jrdn 2013-02-27 16:51:49

2

我试图解释加入简单越好。假设我们必须存储一些关系信息:人员(姓名,姓氏)和少量分配给人的电子邮件。

首先 - 我们将人员信息保存在表格人员中。我们需要唯一的行标识符personId,这将使我们能够将人确切地指向个人数据库。

table persons 
personId, name, surname 
     1, John, Foo 
     2, Mike, Bar 

当我们有这样的表格时,我们可以将其他人的电子邮件存储在其他表中。在这种情况下,创建唯一的行标识符不是必需的,但在所有表中存储这些行标识符是一种很好的做法。 PersonId字段告诉我们什么人拥有该电子邮件。

table emails 
emailId, personId, address 
     1,  1, [email protected] 
     2,  1, [email protected] 
     3,  2, [email protected] 
     4,  2, [email protected] 

现在我们可以选择连接数据。

SELECT persons.Name, persons.Surname, emails.address 
FROM 
    persons 
    join 
    emails 
ON 
    persons.personId = emails.personId 

该查询将返回数据(地址分配给他们的人)。

John, Foo, [email protected] 
    John, Foo, [email protected] 
    Mike, Bar, [email protected] 
    Mike, Bar, [email protected] 

这是明确的吗?

如果连接不清楚 - 也许访问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返回的数据总是以表格的形式,而不是树形。

+0

谢谢。但是,如果像在这个数据库中一样,我有一个雇员表(key:emp_no),薪水表(key:emp_no),dept_emp(key:emp_no,dept_no)和部门(dept_no),我将如何去加入他们?这是给我最大的麻烦。 – jrdn 2013-02-27 15:38:46

+0

哦,并且dept_emp表可能有许多同一名雇员的条目,如果这有什么区别的话。 – jrdn 2013-02-27 15:41:38

+0

@jrdnhannah我添加了一些关于多个连接的信息。你问的另外一件事:如果一个“主”行有许多“细节”行 - 你会得到许多重复的主值的行,但不同的细节(见我的“返回数据”的电子邮件 - 有约翰富2次,有两个不同的电子邮件 – Kamil 2013-02-27 15:46:46