Lesson6 表の結合


リレーショナルデータベースの基礎でもあるリレーショナルモデルが、他のデータモデルと比べて異なる点は何でしょうか。やはり、データを表という単位で扱い、表と表との関連付け(リレーションシップを取ると言います。)を行える点でしょう。この関連付けを行うことによって、データの重複を避けることが可能になり、追加や修正にも柔軟に対応できるようにもなります。

ここでは、実際にSQL文を使ったリレーションシップの実現方法について考えてみます。

6.1 リレーションシップとは
リレーションシップとは表と表とを互いに関連付け、さらに新しい表をつくり出す機能です。新しく作成された表も、もちろん通常の表と同じように扱うことができるので、本来の表に含まれないデータでも取得することができるようになります。

例えば次のような表が存在したとします。

SELECT * FROM BUYS;

   NO NAME            SHOP
----- --------------- -------
1 みかん 2
2 りんご 2 3 キュウリ 1
4 ぶどう 2
5 テレビガイド 3

SELECT * FROM SHOP;

NO    NAME
----- ---------------
   1 八百八
   2 くだものキムラ
   3 ブック原木
 

上の2つの表は 買い物リスト( BUYS ) と そのお店 ( SHOP ) のリストです。
この2つの表の共通点は BUYS 表にある SHOP の 番号( NO ) と SHOP表にある 番号 NO そのものです。この2つの値を使って表を結び付けます。

SELECT BUYS.NO, BUYS.NAME, SHOP.NAME 
       FROM BUYS, SHOP WHERE BUYS.SHOP = SHOP.NO;

結果は次のようになります。

NO    NAME            SHOP
----- --------------- ---------------
1 みかん くだものキムラ
2 りんご くだものキムラ 3 キュウリ 八百八
4 ぶどう くだものキムラ
5 テレビガイド ブック原木

2つの表が結合されて1つの表と同じように扱うことができました。
仮に、この表から果物を買うお店を「くだものキムラ」から「スーパーキムラ」に店名が変更された場合を考えてみて下さい。最終的な表から変更する場合には合計3行の変更をしなければなりません。しかし、このように お店のリスト ( SHOP )として、2つの表が分離していれば SHOP 表の NAME 列の 1行のみを変更して結合するだけで済みます。
また、BUYS表に存在する NO 列の値だけで、SHOP 表の名前を導き出せるようになります。

まとめ
結合はリレーショナルデータベースの軸になる技術です。この技術こそ現在まで高い評価を保ちつづけるリレーショナルデータモデルの実力であると言えるでしょう。表のリレーションシップによって表に柔軟性を与え、拡張性にとんだデータ構造を実現することが出来るようになります。


本書での要点

  1. 単純な結合と等価結合、非等価結合
  2. 2つ以上の表の結合
  3. 外部結合
  4. 自己結合


<戻る>