関連付けはテーブルに対して行うものですが、その際「フィールド同士をどのように結び付けるのか」「どちらのテーブルを基準とするのか」といった結び付けの形態を明確にしなければなりません。この結び付けの様子を「結合」と呼びます。
- INNER JOINによる内部結合 - ここまで、結合の条件指定にWHERE句を用いる形を紹介してきました。WHERE句は1つのテーブルに対するレコードの抽出条件にも使われるため、関連付けたテーブルの場合でも「条件を指定する」という意味が分かりやすくなります。
これと同じ指定をWHERE句を使わず、FROM句で行うこともできます。書式は以下のようになります。
FROM <参照側テーブル> INNER JOIN <被参照側テーブル> ON <参照側テーブル>.<フィールド> = <被参照側テーブル>.<フィールド>
例えば上の例なら、以下のようなSQLでも同じ結果が得られます。
SELECT A.商品ID, A.品名, A.仕入単価, A.仕入先ID, B.仕入先名 FROM 商品_mr A INNER JOIN 仕入先_mr B ON A.仕入先ID = B.仕入先ID
JOINは結合演算子で、INNER修飾子によって内部結合を示し、ON以降に結合条件を記述します。
SQL-92以降はWHERE句による内部結合の指定を「旧形式」と表現しており、FROM句にINNER JOIN~ONを使うのが一般的です。
- 通常は「=」で結ぶ - 一般に、マスターテーブルのIDフィールドを参照してレコードを導出する構造では、WHERE句の条件式で2つのテーブルの(通常は同名の)フィールドを「=」演算子で結ぶ形となります。
しかし、中には<や>などの不等号で「同じではない値を指定」したり、文字列フィールドに対してLike演算子を使い「一部が一致する値を指定」したりする場合もあります。もちろん、IDフィールド同士を対象とした通常の形態ではありません。極めて珍しい構造です(特に不等号は、ほとんど使用されません)。
こういった双方のフィールドの値が「同じではない」という条件の結合も含めて、関連付けた双方のテーブルから、条件を満たした組み合わせだけを抽出してくる形の結合を「内部結合」と呼びます。
内部結合では、双方の値が同じであるという条件の他に、同じでないという条件を指定することもできる――ということです。しかし、条件式に「=」演算子を用いて双方のフィールドの値が同じレコードを導き出す「等結合」が一般的で、内部結合の大半は等結合となります。
従って、「内部結合=等結合」のように捉えられがちですが、内部結合には「=」以外の演算子を使う結合形態も存在するため、「等結合は内部結合のひとつの形態である」と言えます。
|
|
|