English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、SQLの内部結合を使用して2つのテーブルからデータを取得する方法を学びます。
INNER JOINは最も一般的な結合タイプ。これは、2つの結合テーブルで一致する行のみを返します。内部結合の動作を示すウィーン図が以下に示されています。
この点を理解しやすくするために、以下を見てみましょう。employeesおよびdepartments表。
+--------+--------------+------------+---------+ | emp_id | emp_name | hire_date | dept_id | +--------+--------------+------------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 4 | | 2 | Tony Montana | 2002-07-15 | 1 | | 3 | Sarah Connor | 2005-10-18 | 5 | | 4 | Rick Deckard | 2007-01-03 | 3 | | 5 | Martin Blank | 2008-06-24 | NULL | +--------+--------------+------------+---------+ | +---------+------------------+ | dept_id | dept_name | +---------+------------------+ | 1 | Administration | | 2 | Customer Service | | 3 | Finance | | 4 | Human Resources | | 5 | Sales | +---------+------------------+ | |
テーブル: employees | テーブル: departments |
今度は、特定の部署に割り当てられた従業員の「emp_id」、「emp_name」、「hire_date」および「dept_name」を検索する必要があると仮定します。実際の状況では、まだ部署に割り当てられていない従業員がいる可能性があります。例えば、私たちのemployeesテーブルの5番目の従業員「Martin Blank」です。しかし、ここでの問題は、同じSQLクエリで2つのテーブルからデータをどのように取得するかですか?
「employees」テーブルを見ると、従業員が割り当てられた部署のIDを保存する「dept_id」列があることに気づくでしょう。技術的な意味で言えば、「employees」テーブルの「dept_id」列は「departments」テーブルの外部キーです。したがって、この列を使用して2つのテーブル間の橋渡しを行います。
これは例です。この例では、一般的な「dept_id」列を使用して「employee」と「departments」テーブルを結合し、従業員のID、名前、雇用日、所属部署を検索しています。未分配の部署に属していない従業員は含まれていません。
SELECT t1「.emp_id, t」1「.emp_name, t」1「.hire_date, t」2「.dept_name」 FROM employees AS t1 INNER JOIN departments AS t2 ON t1「.dept_id = t」2「.dept_id ORDER BY emp_id;」
ヒント:テーブルを結合する場合、各列名の前に所属するテーブルの名前を追加してください(例:employees.dept_id、departments.dept_idまたはt1「.dept_id、t」2「.dept_id」を使用する場合、テーブル別名)、万一異なるテーブルの列に同名の列が存在して混乱や誤解を避けるために。
注意:時間を節約するために、クエリで以下を使用できます:テーブル別名を使用して長いテーブル名を入力する代わりに。1、および「t」1「.emp_name」ではなく「employees.emp_name」を使用してその列「emp_name」を参照してください。上記のコマンドを実行した後、以下のような結果セットが得られます:
+--------+--------------+------------+-----------------+ | emp_id | emp_name | hire_date | dept_name | +--------+--------------+------------+-----------------+ | 1 | Ethan Hunt | 2001-05-01 | Human Resources | | 2 | Tony Montana | 2002-07-15 | Administration | | 3 | Sarah Connor | 2005-10-18 | Sales | | 4 | Rick Deckard | 2007-01-03 | Finance | +--------+--------------+------------+-----------------+
ご覧の通り、結果セットにはdept_id値を持つ従業員のみが含まれており、その値もdepartmentテーブルのdept_idカラムに存在します。