INNER JOINとLEFT JOIN/RIGHT JOINの違いを理解して使い分ける

2024-04-02

SQLにおけるJOINとINNER JOINの違い

JOIN とは

JOIN は、複数のテーブルのレコードを関連付け、1つの結果セットに結合する操作です。テーブル同士を結合するには、共通する列(結合キー)が必要です。JOINには、INNER JOIN以外にも様々な種類があります。

INNER JOIN とは

INNER JOIN は、両方のテーブルで結合条件が一致するレコードのみ を返す結合方法です。つまり、一方のテーブルにのみ存在するレコードは結果セットに含まれません。

JOINとINNER JOINの比較

項目JOININNER JOIN
結果セット結合条件を満たすレコード一方のテーブルにのみ存在するレコード結合条件を満たすレコードのみ
使用例すべての関連データを抽出したい場合重複なく関連データを抽出したい場合
種類INNER JOIN 以外にも LEFT JOINRIGHT JOINFULL JOIN などINNER JOINJOIN の省略形として使用可能

テーブル構成

  • 社員テーブル (employees)

  • 部署テーブル (departments)

JOIN

SELECT *
FROM employees
JOIN departments
ON employees.department_id = departments.id;

結果

id | name | department_id | name
------- | -------- | -------- | --------
1 | 山田太郎 | 1 | 営業部
2 | 佐藤花子 | 2 | 経理部
3 | 田中一郎 | 1 | 営業部

INNER JOIN

SELECT *
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;
id | name | department_id | name
------- | -------- | -------- | --------
1 | 山田太郎 | 1 | 営業部
2 | 佐藤花子 | 2 | 経理部

上記の例では、JOININNER JOIN は同じ結果セットを返します。これは、employees テーブルと departments テーブルのすべてのレコードに共通する department_id が存在するためです。

一方のテーブルにのみ存在するレコード を含めたい場合は、INNER JOIN ではなく JOIN を使用する必要があります。

  • JOIN は、複数のテーブルからデータを結合する操作
  • INNER JOIN は、両方のテーブルで結合条件が一致するレコードのみを返す結合方法
  • 一方のテーブルにのみ存在するレコードも含めたい場合は、JOINを使用する

補足

  • INNER JOINJOIN の省略形として使用できます。
  • JOIN には、LEFT JOINRIGHT JOINFULL JOIN など様々な種類があります。



JOIN

SELECT *
FROM employees
JOIN departments
ON employees.department_id = departments.id;
id | name | department_id | name
------- | -------- | -------- | --------
1 | 山田太郎 | 1 | 営業部
2 | 佐藤花子 | 2 | 経理部
3 | 田中一郎 | 1 | 営業部

INNER JOIN

SELECT *
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;
id | name | department_id | name
------- | -------- | -------- | --------
1 | 山田太郎 | 1 | 営業部
2 | 佐藤花子 | 2 | 経理部

LEFT JOIN

SELECT *
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.id;
id | name | department_id | name
------- | -------- | -------- | --------
1 | 山田太郎 | 1 | 営業部
2 | 佐藤花子 | 2 | 経理部
3 | 田中一郎 | NULL | NULL

RIGHT JOIN

SELECT *
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.id;
id | name | department_id | name
------- | -------- | -------- | --------
1 | 山田太郎 | 1 | 営業部
2 | 佐藤花子 | 2 | 経理部

FULL JOIN

SELECT *
FROM employees
FULL JOIN departments
ON employees.department_id = departments.id;
id | name | department_id | name
------- | -------- | -------- | --------
1 | 山田太郎 | 1 | 営業部
2 | 佐藤花子 | 2 | 経理部
3 | 田中一郎 | NULL | NULL



INNER JOIN 以外の方法

サブクエリ

SELECT *
FROM employees
WHERE department_id IN (
  SELECT id
  FROM departments
);
id | name | department_id | name
------- | -------- | -------- | --------
1 | 山田太郎 | 1 | 営業部
2 | 佐藤花子 | 2 | 経理部

UNION

SELECT *
FROM employees
UNION
SELECT *
FROM departments;
id | name | department_id | name
------- | -------- | -------- | --------
1 | 山田太郎 | 1 | 営業部
2 | 佐藤花子 | 2 | 経理部
1 | 営業部 | NULL | NULL
2 | 経理部 | NULL | NULL

CROSS JOIN

SELECT *
FROM employees
CROSS JOIN departments;
id | name | department_id | name
------- | -------- | -------- | --------
1 | 山田太郎 | 1 | 営業部
1 | 山田太郎 | 1 | 経理部
2 | 佐藤花子 | 2 | 営業部
2 | 佐藤花子 | 2 | 経理部
3 | 田中一郎 | 1 | 営業部
3 | 田中一郎 | 1 | 経理部

その他

上記以外にも、CASE 式やピボットテーブルなど、状況に応じて様々な方法があります。

  • INNER JOIN は、最も基本的な結合方法であり、重複なく関連データを抽出したい場合に使用します。
  • サブクエリ は、複雑な結合条件を指定したい場合に使用します。
  • UNION は、異なるテーブル構造のデータを結合したい場合に使用します。
  • CROSS JOIN は、すべてのレコードを組み合わせたい場合に使用します。

INNER JOIN 以外にも、複数のテーブルからデータを結合する方法があります。どの方法を使うべきかは、目的や状況によって異なります。


sql sql-server join


SSIS Excel インポートで列のデータ型が誤って認識される原因と解決策

SSIS (SQL Server Integration Services) を使用して Excel ファイルをインポートする際に、列のデータ型が誤って認識されることがあります。これは、Excel ファイルのフォーマットや設定、SSIS の設定などが原因で発生します。...


MySQLのSELECTクエリで役立つ!列が空でない行の抽出テクニック

IS NOT NULL オペレータは、列の値が NULL でないかどうかを判断します。このクエリは、your_table テーブルのすべての行を your_column 列が NULL でないもののみ選択します。TRIM() 関数と <> '' オペレータを使用する...


SQL Server で UNIX タイムスタンプを datetime に変換:3 つの方法とサンプルコード

SQL Server では、bigint 型の UNIX タイムスタンプを datetime 型に変換することができます。UNIX タイムスタンプは、1970 年 1 月 1 日 00:00:00 UTC から経過した秒数を表す数値です。一方、datetime 型は、日付と時刻を表すデータ型です。...


【初心者向け】SQL Server テーブル定義の確認方法:T-SQL クエリとシステムプロシージャを使いこなす

SQL Server でテーブル定義を表示するには、主に以下の 2 つの方法があります。システムストアドプロシージャを使用するTransact-SQL (T-SQL) クエリを使用する利点シンプルでわかりやすい初心者でも使いやすい手順SQL Server Management Studio (SSMS) を起動します。...


SQL SQL SQL Amazon で見る



データ結合の壁を超えよう!INNER JOINとOUTER JOINを使い分けるためのヒント

INNER JOIN と OUTER JOIN は、JOINの種類の中でも特に重要なものです。INNER JOIN と OUTER JOIN の主な違いは、結合する行の条件です。INNER JOIN は、結合するテーブル同士で共通する行のみを抽出します。 一方、OUTER JOIN は、共通する行だけでなく、共通しない行も含めて抽出することができます。


データベース結合の基本!INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN の違いを徹底解説

INNER JOIN (内部結合)条件に一致するレコードのみを結合します。両方のテーブルで一致するレコードが存在する場合のみ、結果に表示されます。例:この例では、users テーブルと orders テーブルを users. id と orders


SQL JOIN を使ってできること - データ分析の可能性を広げる

JOIN には様々な種類があり、それぞれ異なるデータの結合方法を提供します。INNER JOIN (内部結合)共通する列を持つ行のみを結合します。最も基本的な JOIN で、重複なく一致するデータのみを取得できます。例:このクエリは、顧客テーブルと注文テーブルを顧客IDで結合し、両方のテーブルに存在する顧客のみの情報を取得します。