データベース千夜一夜第11回

テーブルの関連付け(1)~SQLによるリレーションの基本 長谷川裕行
有限会社 手國堂

SQLによる関連付け

以上のことを理解した上で、SQLによるリレーションの記述を紹介しましょう。基本は非常に単純です。


- WHERE句でフィールドをつなぐ -

SQLでは、テーブル同士を関連付けるためにWHERE句を使います。書式は以下のようになります。

  WHERE <参照側テーブル>.<フィールド> = <被参照側テーブル>.<フィールド>

これで、

  参照側テーブルの<フィールド>で示したフィールド
  と
  非参照側の<フィールド>で示したフィールド
  とが結び付けられ
  2つのテーブルが双方の<フィールド>で関連付けられた

ことになります。

2つのテーブルを関連付けるため、フィールド名の前に必ずテーブル名と「.」を付け、どのテーブルに属するフィールドなのかを明確にします。


- 商品と仕入先を関連付ける -

サンプル・データベースのテーブル「商品_mr」と「仕入先_mr」を例に説明しましょう。図3のように、テーブル「商品_mr」のフィールド「仕入先ID」を介して、テーブル「仕入先_mr」から唯一のレコード(商品の仕入先)を参照できるようにします。


この状態で、

  商品ID 品名 仕入単価 仕入先ID 仕入先名

の各フィールドを抽出するには、以下のようなSQLを記述します。

  SELECT 商品_mr.商品ID, 商品_mr.品名,
                 商品_mr.仕入単価, 商品_mr.仕入先ID,
                 仕入先_mr.仕入先名
  FROM    商品_mr, 仕入先_mr
  WHERE   商品_mr.仕入先ID = 仕入先_mr.仕入先ID

アンダーラインの箇所で、双方のテーブルのフィールドによって2つのテーブルを関連付けています。



- 別名を使って簡潔にする -

先述したように、テーブルを関連付けたSQLではフィールドがどのテーブルに属するのかを示すために、フィールドを「テーブル名.フィールド」という形で記述しなければなりません。

ここでの例のように「商品_mr」といった短いテーブル名ならよいのですが、テーブル名が長い場合は記述が大変面倒です。また、記述ミスによってエラーが発生する可能性も増えてきます。

そこで、テーブルに短い別名を付けて記述を簡潔にする方法があります。別名はFROM句でテーブル名を記述するときにAS句を使って付けます。

  FROM <テーブル名> AS <別名>, <テーブル名> AS <別名>

先のSQLで「商品_mr」に“A”、「仕入先_mr」に“B”という別名を付けると、以下のようになります。

  SELECT A.商品ID, A.品名, A.仕入単価, A.仕入先ID,
                 B.仕入先名
  FROM    商品_mr AS A, 仕入先_mr AS B
  WHERE   A.仕入先ID = B.仕入先ID

もちろん、処理結果はテーブル名を正規に記述した場合と変わりません。



- ASも省略できる -

別名を設定するASは省略できるので、SQLはさらに以下のように簡潔にできます。

  SELECT A.商品ID, A.品名, A.仕入単価, A.仕入先ID,
                 B.仕入先名
  FROM    商品_mr A, 仕入先_mr B
  WHERE   A.仕入先ID = B.仕入先ID

SQL分を短くすることで、ネットワークのトラフィックも多少軽減できるでしょう。



トップページ
リレーションと正規化(1)
リレーションと正規化(2)
リレーションは2つのテーブルの関係
SQLによる関連付け
WHERE句でフィールドをつなぐ
商品と仕入先を関連付ける
別名を使って簡潔にする
ASも省略できる
3つのテーブルを関連付ける
あとがき
Copyright © MESCIUS inc. All rights reserved.