東京都で開催する「初心者向けデータベース設計入門」講座です。

7.2 サブクエリの発展

サブクエリの発展

7.2 サブクエリの発展

 ここからは、サブクエリの発展的な使い方を説明します。

7.2.1 「FROM」句でのサブクエリ

 前節では「WHERE」句の条件としてサブクエリを使用しましたが、サブクエリは「WHERE」句だけで使われるわけではありません。
 まず「FROM」句での使用例から見ていきます。
 「FROM」句でサブクエリを使用する場合の書式は下記のようになります。

   SELECT 列名 FROM サブクエリ

 例えば「bookinfo」と「orderinfo」を結合して注文金額を算出し、ユーザーごとの受注金額を集計した後にその受注金額の最大値を取得するケースを考えてみましょう。
 受注金額の集計までは、これまで学習したDDL文で取得することができます。

   SELECT B.user,SUM(A.price*B.quantity)
   FROM bookinfo A INNER JOIN orderinfo B ON A.isbn=B.isbn
   GROUP BY B.user;

 この集計した値を元に最大の注文金額を取得するには、先に示したDDL文をサブクエリとして「FROM」句に入れ、テーブルと見做すことで実現できます。
 DDL文は下記のようになります。

   SELECT MAX(C.amount) FROM
   (SELECT B.user,SUM(A.price*B.quantity) AS amount
   FROM bookinfo A INNER JOIN orderinfo B ON A.isbn=B.isbn
   GROUP BY B.user
) C;


7.2.2 「SELECT」句でのサブクエリ

 次に「SELECT」句でのサブクエリの使用方法について見てみましょう。
 書式は下記のようになります。

   SELECT サブクエリ FROM テーブル名;

 「orderinfo」でユーザー毎の受注数量と全体の受注数量を対比して見たい場合などは下記のようなサブクエリで取得することができます。

   SELECT user,SUM(quantity),(SELECT SUM(quantity) FROM orderinfo) FROM orderinfo GROUP BY user;

7.2.3 「HAVING」句でのサブクエリ

 「HAVING」句でもサブクエリが使えます。
 書式は下記のようになります。

   SELECT グループ化キー,集計関数(列名) FROM テーブル名 GROUP BY グループ化キー
   HAVING 集計関数(列名) 演算子 サブクエリ;

 「orderinfo」でユーザー毎の受注数量と全体の受注数量を対比して見たい場合などは下記のようなサブクエリで取得することができます。
 「orderinfo」で、注文数が平均注文数を下回っているユーザーを取得したい場合などは、下記のようなDDL文で取得可能です。

   SELECT user,SUM(quantity) FROM orderinfo GROUP BY user
   HAVING SUM(quantity) < (SELECT AVG(quantity) FROM orderinfo);


NEXT>> 7.3 本章のまとめ

ご不明点はお問い合わせフォームからご連絡ください。

セミナー一覧

法人向けプログラミング研修

Java、PHPの社員研修|新人研修
セミナー講師紹介

主席インストラクター
早稲田大学大学院 理工学部卒業
SanJose 州立大学、コンピューター工学部卒業
アメリカのシリコンバレーでは、プログラマー・SEとして活躍
講師の詳細はこちら

PAGETOP
Copyright © 2016 FusionOne Co.,Ltd. All rights reserved.