2017-05-26 11 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 

私は結果を得たが、雇用主は、よりDEPTSを持っている場合、テーブルは私に同じ雇用者のためのより多くの行を提供します。

これが正常かどうか、またはそれを照会する方法が他にあるかどうかを知りたいのですが。私は結合でいくつかの例を見たが、私は3つのテーブルでそれを使う方法を知らない。

+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句は、2つのテーブルを結合するために一致する必要のあるフィールドを指定します。 dept_empと同じです。

この例では、一致する行のみを返すINNER JOINを使用しました。ジョインの完全なリストとその働き方については、多数のリソースが説明されています。 https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

EDIT:ここで良いリソースがあるあなたの質問の他の部分に応じて:私は結果を得たが、雇用主は、よりDEPTSを持っている場合、テーブルは私のために より多くの行を与える

同じ雇用主。

これが正常であるかどうか、または他の方法でクエリするかどうかを知りたい場合 私は結合でいくつかの例を見たが、私はそれを使用する方法がわからない 3つのテーブル。これは私のためにすべて新しいものです。

はい、これは従業員一人当たりの複数の部門がある場合は、各部門が同じ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 –

関連する問題