English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL INNER JOIN 文

このチュートリアルでは、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カラムに存在します。