我正在玩员工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
我得到了结果,但如果雇主有更多的支出,那么这张桌子会为同一雇主提供更多排。
我想知道这是否正常,或者是否有其他方法可以查询。我看到了一些连接的例子,但我不知道如何将它与三个表一起使用。
答案 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 。