ITサポート

セミナー

会員特典

その他

過去のコラム等

Twitter

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■第29回 リレーショナルデータベースの基本操作 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━  前回まで、リレーショナルデータベースの正規化をやってきましたが、正規  化した結果はテーブルとして実装します。  実装したテーブルに対し、プログラムからデータを入れたり、取り出したり  する処理があり、今回は取り出す処理についてお話したいと思います。  リレーショナルデータベースのテーブルは、列と行の二次元表で構成され、  基本操作として、「射影」、「選択」、「結合」の3つがあり、これらの操  作を組み合わせることで、自由度の高い取り出しができます。  実例を通して紹介しますので、以下のサンプルテーブルをご覧ください。  ・取引明細  ---------------------------------------------  | 取引番号 | 顧客コード | 商品コード | 数量 |  -----------+------------+------------+-------  | 00000001 | 0001 | A001 | 10 |  -----------+------------+------------+-------  | 00000002 | 0001 | B001 | 5 |  -----------+------------+------------+-------  | 00000003 | 0002 | A002 | 8 |  -----------+------------+------------+-------  | 00000004 | 0003 | A001 | 25 |  -----------+------------+------------+-------  | 00000005 | 0001 | B002 | 15 |  ---------------------------------------------  ・商品  ----------------------------------  | 商品コード | 商品名 | 単価 |  -------------+------------+-------  | A001 | 抹茶ケーキ | 200 |  -------------+------------+-------  | A002 | モンブラン | 250 |  -------------+------------+-------  | B001 | クッキー | 80 |  -------------+------------+-------  | B002 | ビスケット | 70 |  ---------------------------------- ●射影  あるテーブルから、指定した列のみを取り出す操作です。  取引明細から取引番号と商品コードを取り出すと、以下のようになります。  -------------------------  | 取引番号 | 商品コード |  -----------+-------------  | 00000001 | A001 |  -----------+-------------  | 00000002 | B001 |  -----------+-------------  | 00000003 | A002 |  -----------+-------------  | 00000004 | A001 |  -----------+-------------  | 00000005 | B002 |  -------------------------  これをSQLで記述すると、  SELECT   取引番号, 商品コード  FROM   取引明細  となります。 ●選択  射影とは逆に、あるテーブルから、指定した行のみを取り出す操作です。  取引明細から顧客コードが0001の行を取り出すと、以下のようになります。  ---------------------------------------------  | 取引番号 | 顧客コード | 商品コード | 数量 |  -----------+------------+------------+-------  | 00000001 | 0001 | A001 | 10 |  -----------+------------+------------+-------  | 00000002 | 0001 | B001 | 5 |  -----------+------------+------------+-------  | 00000005 | 0001 | B002 | 15 |  ---------------------------------------------  これをSQLで記述すると、  SELECT   *  FROM   取引明細  WHERE   顧客コード = '0001'  となります。 ●結合  正規化では、意味のある単位に表を分割していきましたが、取り出すときに  は再び元の状態で取り出さないと不都合があります。  そこで、テーブル同士を共通するキーで結合させることができます。  取引明細と商品を結合すると、以下のようになります。  -----------------------------------------------------------------  | 取引番号 | 顧客コード | 商品コード | 商品名 | 単価 | 数量 |  -----------+------------+------------+------------+------+-------  | 00000001 | 0001 | A001 | 抹茶ケーキ | 200 | 10 |  -----------+------------+------------+------------+------+-------  | 00000002 | 0001 | B001 | クッキー | 80 | 5 |  -----------+------------+------------+------------+------+-------  | 00000003 | 0002 | A002 | モンブラン | 250 | 8 |  -----------+------------+------------+------------+------+-------  | 00000004 | 0003 | A001 | 抹茶ケーキ | 200 | 25 |  -----------+------------+------------+------------+------+-------  | 00000005 | 0001 | B002 | ビスケット | 70 | 15 |  -----------------------------------------------------------------  SELECT   取引明細.取引番号, 取引明細.顧客コード, 取引明細.商品コード,   商品.商品名, 商品.単価, 取引明細.数量  FROM   取引明細, 商品  WHERE   取引明細.商品コード = 商品.商品コード  となります。  結合の書き方は他にもありますが、それはまた別の号で紹介します。  ここでは結合イメージだけ、ご理解ください。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━