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

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

現在休刊中です    
解除

規約に同意して

2009/02/16

【誰にでもできる!システム開発】サブクエリ(前編)

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

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

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

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

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

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

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


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

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■第32回 サブクエリ(前編)
────────────────────────────────────

 時々、パフォーマンスが異常に遅いシステムを見かけることがあります。

 ソースコードを見てみると、クエリの結果を一行ずつ取り出しながら、さら
 にクエリを発行していることが多いです。

 データベースへのアクセスは時間の掛かる処理ですので、できるだけ発行回
 数を減らした方が、パフォーマンスは良くなります。

 作成者に聞いてみると、クエリ結果として返ってきた値でクエリしたいから
 などと言われるのですが、こんな方法を使わなくても、一回のクエリでまと
 めて結果を取得することが可能です。

 それが、サブクエリです。

 サブクエリを使うことで、クエリの結果をクエリの一部として使うことがで
 きるようになりますので、SQLの発行回数を減らすことができるようになり
 ます。


 実例を通して紹介しますので、以下のサンプルテーブルをご覧ください。

 ・取引明細
 ---------------------------------------------
 | 取引番号 | 顧客コード | 商品コード | 数量 |
 -----------+------------+------------+-------
 | 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 |
 -------------+------------+-------
 |    C001    | マシュマロ |  100 |
 ----------------------------------


●WHERE句のサブクエリ

 WHERE句でサブクエリを使用すると、サブクエリの結果を条件式として利用
 することができます。

 以下の例では、商品名が抹茶ケーキとなっている商品コードをサブクエリで
 返し、その商品コードに該当する取引明細を選択します。

 SELECT 
     * 
 FROM 
     取引明細 
 WHERE 
     商品コード = 
         (SELECT 商品コード FROM 商品 WHERE 商品名 = '抹茶ケーキ')
 ORDER BY 
     取引番号

 ---------------------------------------------
 | 取引番号 | 顧客コード | 商品コード | 数量 |
 -----------+------------+------------+-------
 | 00000001 |    0001    |    A001    |   10 |
 -----------+------------+------------+-------
 | 00000004 |    0003    |    A001    |   25 |
 ---------------------------------------------


 上記の例では、サブクエリの結果が1行ですので、「商品コード = 」と書
 きましたが、複数行が返されるときは、IN句を使用します。

 例として、単価が100円未満の商品を販売した取引明細を選択すると、以下
 のようなサブクエリになります。

 SELECT 
     * 
 FROM 
     取引明細 
 WHERE 
     商品コード IN (SELECT 商品コード FROM 商品 WHERE 単価 < 100)
 ORDER BY 
     取引番号

 ---------------------------------------------
 | 取引番号 | 顧客コード | 商品コード | 数量 |
 -----------+------------+------------+-------
 | 00000002 |    0001    |    B001    |    5 |
 -----------+------------+------------+-------
 | 00000005 |    0001    |    B002    |   15 |
 ---------------------------------------------

 というように書くことができますが、このケースでしたら前回解説したJOIN
 を使った式でも書けます。

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

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


 Developers Summit 2009というカンファレンスに行ってきました。

 2003年から毎年行われているのですが、技術の進歩に伴ってセッション内容
 も変化しているのを感じます。

 特に今年はクラウドに関する話題が豊富になった印象があります。
 もちろん毎年前から話題にはなっていましたが、今年は具体的な技術が紹介
 されており、注目度が伺えます。

 実際、「Amazon EC2」、「Google App Engine」が公開され、マイクロソフ
 トも「Windows Azure」を発表しています。

 「ちょっとしたシステムをちょっとだけ使う」
 クラウドは、そんな使い方で少しずつ普及しつつあるようです。


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

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

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

 配信中止はこちらから↓
  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/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
現在休刊中です
解除

規約に同意して

最近の記事

上へ戻る