MySQL员工数据库示例

时间:2017-05-26 17:12:45

标签: mysql sql

我正在玩员工mysql数据库示例,试图了解多个表的查询。问题是我正试图找到一个包含这个结果的表。

emp_no, name, last name, from date, to date, dept_name

并使用此查询:

SELECT 
  employees.emp_no, 
  employees.first_name, 
  employees.last_name, 
  dept_emp.from_date, 
  dept_emp.to_date, 
  departments.dept_name 
FROM (employees, dept_emp, departments) 
WHERE employees.emp_no = dept_emp.emp_no 
  AND departments.dept_no = dept_emp.dept_no

我得到了结果,但如果雇主有更多的支出,那么这张桌子会为同一雇主提供更多排。

我想知道这是否正常,或者是否有其他方法可以查询。我看到了一些连接的例子,但我不知道如何将它与三个表一起使用。

2 个答案:

答案 0 :(得分:2)

这是您使用联接的完美示例。请参阅下面的示例,了解如何使用连接语法。下面的查询将产生与查询相同的结果,但是是更传统的语法。优点是您可以分离加入逻辑和过滤(WHERE子句)逻辑。如果需要过滤连接的结果,那么它将是一个简单的WHERE子句,而不是在WHERE子句中同时具有连接逻辑和过滤逻辑。

SELECT employees.emp_no, 
       employees.first_name, 
       employees.last_name, 
       dept_emp.from_date, 
       dept_emp.to_date, 
       departments.dept_name 
FROM employees e
INNER JOIN dept_emp de
    ON e.emp_no = de.emp_no
INNER JOIN departments d
    ON de.dept_no = d.dept_no

我们首先从employees表中选择,加入dept_emp表。 on子句指定需要匹配的字段以连接两个表。与部门的dept_emp相同。

在这个例子中,我使用了INNER JOIN,它只返回匹配的行。有关联接的完整列表及其工作原理,您可以找到大量的资源解释。这是一个很好的资源: https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

编辑:回答你问题的其他部分:

  

我得到了结果,但如果雇主有更多的支付,那桌子给了我   同一雇主的更多行。

     

我想知道这是否正常,或者是否有其他查询方式   那。我看到了一些加入的例子,但我不知道如何使用它   有三张桌子。这对我来说都是新的。

是的,这是正常的,如果每个员工有多个部门,每个部门将是一行,具有相同的emp_no。

答案 1 :(得分:0)

实现此目标的最佳方法是使用 INNER_JOIN