English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、SQL右結合を使用して二つのテーブルからデータを取得する方法を学びます。
RIGHT JOINはLEFT JOIN左テーブルに満たす条件を満たす行と右テーブルのすべての行を返します。
完全に対照的に右結合は外結合の一種としても呼ばれますright outer join外部結合の他のバリエーションはこれを明確に理解するために、以下を見てみましょう左結合完全結合
注意:以下のウィーン図は右結合の動作を示しています。
外部結合は、結合する二つのテーブルの行が一致しない場合でも結果セットに行を含める結合です。employeesこれを明確に理解するために、以下を見てみましょうdepartmentsおよび
+--------+--------------+------------+---------+ テーブル。 +--------+--------------+------------+---------+ | 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 | emp_id | emp_name | hire_date | dept_id | 2008-06-24 | NULL | +--------+--------------+------------+---------+ | +---------+------------------+ | dept_id | dept_name | +---------+------------------+ | 1 | Administration | | 2 | Customer Service | | 3 | Finance | | 4 | Human Resources | | 5 | Sales | +---------+------------------+ | |
テーブル: employees | テーブル: departments |
今度は、すべての部署の名前およびその部署で働いている従業員の詳細を検索したいと仮定します。しかし、実際には、現在働いている従業員がいない部署もありえます。それでは、答えを見つけてみましょう。
以下のクエリは、一般的なdept_idフィールドを使用してemployeeとdepartmentテーブルを結合し、すべての利用可能な部署およびその部署の従業員のID、名前、雇用日を検索します。
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name FROM employees AS t1 RIGHT JOIN departments AS t2 ON t1.dept_id = t2.dept_id ORDER BY dept_name;
ヒント:結合クエリでは、左側のテーブルはJOIN子句で最も左側に現れるテーブルであり、右側のテーブルは最も右側に現れるテーブルです。
実行した後、以下の結果が得られます:
+--------+--------------+------------+------------------+ | emp_id | emp_name | hire_date | dept_name | +--------+--------------+------------+------------------+ | 2 | Tony Montana | 2002-07-15 | Administration | | NULL | NULL | NULL | Customer Service | | 4 | Rick Deckard | 2007-01-03 | Finance | | 1 | Ethan Hunt | 2001-05-01 | Human Resources | | 3 | Sarah Connor | 2005-10-18 | Sales | +--------+--------------+------------+------------------+
正しい結合は、従業員テーブルの dept_id 列が一致するかどうかに関わらず、結果セットに部門テーブルのすべての行を含む必要があります。なぜなら、部門に従業員がいない場合でも「Customer Service」が含まれることがはっきりしています。
注意:右側のテーブルに一行があって左側のテーブルに一致する行がない場合、関連する結果行は左側のテーブルのすべての列の NULL 値を含む。