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

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

現在休刊中です    
解除

規約に同意して

2009/03/02

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

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

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

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

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

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

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

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


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

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■第33回 サブクエリ(後編)
────────────────────────────────────

 前回は、WHERE句のサブクエリを紹介しました。
 WHERE句にサブクエリを用いると、サブクエリの結果を条件式に利用するこ
 とができました。

 今回は、SELECT句、FROM句のサブクエリを紹介したいと思います。


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

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


●SELECT句のサブクエリ

 WHERE句でのサブクエリは、条件式として利用する目的で使われ、サブクエ
 リの結果を取得することはできませんでした。

 しかし、SELECT句でサブクエリを使用したときは、メインクエリ結果の一部
 として、サブクエリの結果を取得することが可能です。

 以下の例では、商品の各レコードに対し、取引明細の数量を合計したものを
 サブクエリとして取得します。

 SELECT 
     商品.商品コード, 
     商品.商品名, 
     商品.単価, 
     (SELECT SUM(数量) 
      FROM 取引明細 
      WHERE 商品コード = 商品.商品コード) AS 数量計 
 FROM 
     商品 
 ORDER BY 
     商品コード

 -------------------------------------------
 | 商品コード |   商品名   | 単価 | 数量計 |
 -------------+------------+------+---------
 |    A001    | 抹茶ケーキ |  200 |     35 |
 -------------+------------+------+---------
 |    A002    | モンブラン |  250 |      8 |
 -------------+------------+------+---------
 |    B001    | クッキー   |   80 |      5 |
 -------------+------------+------+---------
 |    B002    | ビスケット |   70 |     15 |
 -------------+------------+------+---------
 |    C001    | マシュマロ |  100 |   NULL |
 -------------------------------------------


●FROM句のサブクエリ

 最後はFROM句のサブクエリです。

 これまでの、WHERE句、SELECT句でのサブクエリは、クエリ結果の値を条件
 式や結果として利用するだけでしたが、FROM句に記述した場合は、サブクエ
 リ結果をテーブルとして扱うことができます。

 サブクエリ結果Aとサブクエリ結果Bのクエリを求めるといった使い方がで
 きますのでクエリの幅が広がります。

 以下の例では、取引明細の商品毎に平均数量をサブクエリで求め、その結果
 と商品を結合しています。

 SELECT 
     商品.商品コード, 
     商品.商品名, 
     商品.単価, 
     取引数量.平均数量, 
     (商品.単価 * 取引数量.平均数量) AS 売上平均 
 FROM 
     商品 LEFT OUTER JOIN 
     (SELECT 商品コード, AVG(数量) 平均数量 
      FROM 取引明細 
      GROUP BY 商品コード) AS 取引数量 
     ON 商品.商品コード = 取引数量.商品コード 
 ORDER BY 
     商品コード

 --------------------------------------------------------
 | 商品コード |   商品名   | 単価 | 平均数量 | 売上平均 |
 -------------+------------+------+----------+-----------
 |    A001    | 抹茶ケーキ |  200 |     17.5 |     3500 |
 -------------+------------+------+----------+-----------
 |    A002    | モンブラン |  250 |        8 |     2000 |
 -------------+------------+------+----------+-----------
 |    B001    | クッキー   |   80 |        5 |      400 |
 -------------+------------+------+----------+-----------
 |    B002    | ビスケット |   70 |       15 |     1050 |
 -------------+------------+------+----------+-----------
 |    C001    | マシュマロ |  100 |     NULL |     NULL |
 --------------------------------------------------------

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

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


 昨年5月に創刊し、150名以上もの読者に支えられてきた当メールマガジンで
 すが、次回3月16日発行分を持ちまして、休刊させていただくことになりま
 した。

 10ヶ月間という短い期間ではありましたが、読者の皆さんがいたおかげで、
 ここまで連載を続けることができました。
 本当にありがとうございました。

 関連メールマガジン「誰にでもできる!インターネット活用術」は、今後も
 連載を続けていきますので、よろしければこちらもご購読いただければと思
 います。


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

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

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

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

規約に同意して

最近の記事

上へ戻る