2017-05-26 31 views
-1

我正在和員工mysql數據庫示例一起玩,試圖瞭解多個表的查詢。事情是,我試圖得到這個結果的表。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 

我得到的結果,但如果僱主有更多的科指南表給了我爲同一僱主更行。

我想知道這是否正常或者是否有任何其他方式來查詢。我看到一些加入示例,但我不知道如何將它與三個表一起使用。

+1

怎麼樣'GROUP BY dept_emp.dept_no'? – Luiz

+0

閱讀關於使用'JOIN'語句 –

+0

使用GROUP BY應該足夠你 –

回答

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的行。

+0

你能否澄清這個答案是如何解決這個問題的(具體來說,當員工擁有多個部門時,OP似乎要求獲取多行) –

+0

更新了我的答案。 – datadever

+0

我仍不確定您的迴應如何討論INNER JOINS。 OP的查詢具有在WHERE子句中定義的連接。據我所知,你的例子只有語法上的不同。 –

0

實現此目的的最佳方法是使用INNER_JOIN

+2

該聯接位於OP示例中的WHERE子句中。它是一個INNER JOIN,但是它的語法不同。看到這裏:https://stackoverflow.com/questions/2241991/in-mysql-queries-why-use-join-instead-of-where –