SQL INNER JOIN -- マッチする行のみを返す
SQL INNER JOINの仕組みを学びます。両方のテーブルでマッチする値がある行のみを返します。ベン図、構文、実践的な例を含みます。
JOIN Types
詳細な説明
INNER JOINとは?
INNER JOINは最も一般的なSQL結合タイプです。両方のテーブルで結合条件が満たされる行のみを返します。左テーブルの行に右テーブルでマッチする行がない場合、その行は結果から完全に除外されます。その逆も同様です。
構文
SELECT a.*, b.*
FROM employees AS a
INNER JOIN departments AS b
ON a.department_id = b.id;
ステップバイステップの動作
- データベースエンジンが
employees(左テーブル)の各行を取得します。 - 各行について、
b.idがa.department_idにマッチする行をdepartments(右テーブル)から検索します。 - マッチが見つかると、両テーブルのカラムが1つの結果行に結合されます。
- マッチが見つからない場合、その従業員行はスキップされ、出力に表示されません。
ベン図の解釈
古典的なベン図では、INNER JOINは共通部分に対応します。両方の円が重なる領域です。結合キーに基づいて両方のテーブルに存在するデータのみが含まれます。
パフォーマンス特性
INNER JOINは通常最もパフォーマンスの良い結合タイプです。データベースがマッチしない行を早期にスキップできるためです。結合カラム(department_idとid)にインデックスを追加すると、フルテーブルスキャンの代わりにインデックスルックアップを使用できます。
よくある落とし穴
いずれかの結合カラムにNULL値が含まれている場合、それらの行は決してマッチしません。SQLではNULL = NULLはNULL(TRUEではなく)と評価されるためです。NULL安全な等価が必要な場合はIS NOT DISTINCT FROMまたはCOALESCEを使用してください。
ユースケース
両方のテーブルに確実にデータが存在する場合にINNER JOINを使用します。例えば、すべての従業員が有効な部署に所属している必要がある場合に、従業員の詳細と部署名を取得する場合です。