誰にでもできる!システム開発  RSSを登録する

73%は失敗と言われている、システム開発プロジェクトを成功させるためのテクニックや考え方をお届けします。新人エンジニアが失敗しやすいポイントも詳しく解説しています。

現在休刊中です    
解除

規約に同意して

2009/01/05

【誰にでもできる!システム開発】リレーショナルデータベースの基本操作

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

      『誰にでもできる!システム開発』 2009/01/05 号

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

 ご愛読、ありがとうございます。

 このメールマガジンは、システム開発を始めたばかりの方、これから始める
 方向けに、筆者が日頃から心がけていることをお話しています。

 扱う内容については、テクニックと考え方を半分ずつで構成しています。

 思っていた内容と違う、つまらない、読む気力が無くなったという方、
 購読解除はこちらからできます。
  http://www.mag2.com/m/0000263428.html


 著者プロフィール
  http://www.shiga-it-office.com/mailmagazine/writer.html

 事務所概要
  http://www.shiga-it-office.com/profile.html

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■第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 
     取引明細.商品コード = 商品.商品コード

 となります。
 結合の書き方は他にもありますが、それはまた別の号で紹介します。
 ここでは結合イメージだけ、ご理解ください。

------------------------------------------------------------------------
■編集後記

 最後までお読みいただき、ありがとうございました。


 皆様、あけましておめでとうございます。

 昨年は、アメリカのサブプライムローン破綻の影響で金融危機が深刻化しま
 した。昨年を表す感じは「変」で、急変する世の中に対する不安が増してき
 た一年だったのではないでしょうか。

 今年こそは景気回復といきたいところですが、見通しはあまりよくないよう
 で、中小企業だけでなく大手も倒産が相次ぐ、淘汰の年となりそうです。

 そんな淘汰の年を乗り切るには、やはり地に足のついた技術を身につけるこ
 とが一番の近道かもしれません。

 このメールマガジンも、そのような考えで執筆を開始し、2年目となりまし
 た。今年もどうぞよろしくお願いいたします。


 最後になりますが、今号から執筆者が西村秀郷に代わります。
 内容は変わりませんので、引き続きご購読お願いいたします。


 ご感想・ご意見・ご要望などありましたら、気軽にご連絡ください♪
 では、また次回お会いしましょう!

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
『誰にでもできる!システム開発』 2009/01/05 号

 本日のメールマガジンを読んだ感想をお聞かせください。
 お寄せいただいた感想は、メールマガジン上で紹介させていただくことが
 ありますので、ご了承ください。

 配信中止はこちらから↓
  http://www.mag2.com/m/0000263428.html
 メールアドレスの変更はこちらから↓
  http://www.mag2.com/m/0000263428.html
 ご意見&ご感想はこちらから↓
  http://www.shiga-it-office.com/mailmagazine/ImpressionFrom.html
 コンサルティングのご相談はこちらから↓
  http://www.shiga-it-office.com/inquiry.html


 発行元 志賀IT事務所
   http://www.shiga-it-office.com/

 関連メールマガジン 「誰にでもできる!インターネット活用術」
   http://www.mag2.com/m/0000263426.html

 関連ブログ
  ☆コンサル日和
   http://d.hatena.ne.jp/kei_onpu/
  ☆爆裂!C#野郎
   http://csharp.yaminabe.info/
  ☆10年戦える開発技術
   http://10year.yaminabe.info/
  ☆情報処理技術者試験午前対策
   http://am.yaminabe.info/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
現在休刊中です
解除

規約に同意して

最近の記事

上へ戻る