ITサポート

セミナー

会員特典

その他

過去のコラム等

Twitter

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■第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 |  -------------------------------------------------------- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━