以上のことを理解した上で、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分を短くすることで、ネットワークのトラフィックも多少軽減できるでしょう。
|
|
|