INNER JOIN句(インナージョインク)とは | 意味や読み方など丁寧でわかりやすい用語解説
INNER JOIN句(インナージョインク)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
インナージョイン句 (インナージョインク)
英語表記
INNER JOIN (インナージョイン)
用語解説
INNER JOIN句は、リレーショナルデータベース管理システム(RDBMS)において、複数のテーブルから関連するデータを取得するために使用されるSQLの基本的な構文である。日本語では「内部結合」と訳され、その名の通り、指定した条件に基づいて二つ以上のテーブルを内部的に結合し、両方のテーブルに条件が一致するデータが存在する行だけを抽出した結果セットを返す。データベース設計においては、データの重複を排除し一貫性を保つ「正規化」という考え方が基本となる。正規化を行うと、関連する情報が複数のテーブルに分割して格納されることが一般的である。例えば、「商品」に関する情報を格納するテーブルと、「商品のカテゴリ」に関する情報を格納するテーブルを別々に管理することが多い。このとき、商品名とそのカテゴリ名を同時に表示したい場合など、分割されたテーブルにまたがる情報を一度に取得する必要が生じる。INNER JOIN句は、まさにこのような場面で、分割されたテーブル同士を関連付けて、一つのまとまった情報として取り扱うために不可欠な機能である。
INNER JOIN句の基本的な構文は、「SELECT 列名リスト FROM テーブルA INNER JOIN テーブルB ON 結合条件」という形式で記述される。まず、FROM句の後に主軸となるテーブルAを指定し、続いてINNER JOINキーワードの後に結合したい相手のテーブルBを指定する。そして、最も重要なのがON句で指定する「結合条件」である。この結合条件には、どの列の値を基準にしてテーブル同士を関連付けるかを記述する。通常、一方のテーブルの主キーと、もう一方のテーブルでその主キーを参照している外部キーを等号(=)で結ぶ形で指定する。例えば、「商品テーブル」に「カテゴリID」という列があり、「カテゴリテーブル」の主キーである「ID」列と対応している場合、結合条件は「ON 商品テーブル.カテゴリID = カテゴリテーブル.ID」のようになる。これにより、SQLは両テーブルの指定された列の値が一致する行同士をペアにして結合する。なお、INNERキーワードは省略可能であり、単に「JOIN」と記述しても多くのRDBMSではINNER JOINとして解釈されるが、コードの可読性を高めるために明示的にINNERを記述することが推奨される。
INNER JOIN句が実行される際の内部的な動作を理解することも重要である。まず、データベースはFROM句とINNER JOIN句で指定されたテーブルのすべての行の組み合わせを仮想的に作成する。この状態は数学的には直積(デカルト積)と呼ばれる。次に、その膨大な組み合わせの中から、ON句で指定された結合条件を満たすものだけを絞り込む。例えば、商品AのカテゴリIDが「1」で、カテゴリテーブルのID「1」が「飲料」であった場合、この二つの行は結合条件に一致するため、結果セットに含まれる。一方で、商品BのカテゴリIDが「99」であったが、カテゴリテーブルにID「99」が存在しない場合、この商品Bのデータは結合条件を満たす相手がいないため、最終的な結果から除外される。同様に、カテゴリテーブルにID「2」の「菓子」というカテゴリが存在していても、商品テーブルにカテゴリID「2」を持つ商品が一つも登録されていなければ、この「菓子」カテゴリのデータも結果には現れない。このように、INNER JOINは結合する両方のテーブルに、結合条件を満たす対応データが存在する行のみを厳選して抽出する点が最大の特徴である。
この結合処理は、三つ以上のテーブルに対しても適用可能である。例えば、「顧客テーブル」「注文テーブル」「商品テーブル」が存在する場合、「どの顧客が、どの商品を注文したか」という情報を取得するには、複数のINNER JOIN句を連結して記述する。具体的には、「FROM 顧客テーブル INNER JOIN 注文テーブル ON 顧客テーブル.ID = 注文テーブル.顧客ID INNER JOIN 商品テーブル ON 注文テーブル.商品ID = 商品テーブル.ID」のように記述することで、三つのテーブルを段階的に結合し、必要な情報を一つのクエリで取得できる。複雑なクエリになるほど、どのテーブルのどの列を参照しているかを明確にするため、「テーブル名.列名」という形式で記述することが不可欠となる。システム開発の現場では、データベースから情報を取得する際の基本操作としてINNER JOIN句が頻繁に利用されており、その仕組みと正しい記述方法を習得することは、システムエンジニアにとって必須のスキルであると言える。