サブクエリの基本 / WHERE句でのサブクエリ / HAVING句でのサブクエリ


複数のクエリを組み合わせて、1つのクエリが生成した出力で、他のクエリの出力を制御することができます。

クエリを入れ子にして、内側のクエリが値を生成し、それを外側のクエリの述語が評価して TRUE かどうか判断します。

サブクエリの基本

等号や不等号といった関係演算子をベースとする述語に使用するサブクエリは、必ず出力として 1行のみを生成するものでなければなりません。

サブクエリが値をまったく生成しない場合、述語は UNKNOWN と評価しますが、複数の値を生成する場合、メインクエリ (外側のクエリ) は評価不能に陥ってしまい、ステートメントがエラーを生成するという状況になります。

/* サブクエリ */

 SELECT 受注番号 FROM 受注表
        WHERE 商品コード =
        (SELECT 商品コード FROM 商品表
         WHERE 商品名 = 'JUICE');
/* 実行結果 */
受注番号
────
10001
10004
10007

WHERE句でのサブクエリ

本的なサブクエリは WHERE 句の述語によく用いられます。

等号や不等号といった関係演算子をベースとする述語では、サブクエリは 1 行のみを生成するものでなければなりません。

しかし、IN 演算子を使用すれば任意数の行を生成するサブクエリを使用することができるようになります。

IN 演算子は含まれる値と含まれない値の集合を明示的に定義するものです。

/* サブクエリ */

 SELECT 受注番号 FROM 受注表
        WHERE 商品コード IN
        (SELECT 商品コード FROM 商品表
         WHERE 単価 = 400);
/* 実行結果 */
受注番号
────
10001
10004
10006
10007
10009
10011

HAVING句でのサブクエリ

HAVING 句にもサブクエリを使用することが可能です。

使用方法は WHERE 句で使用していたのと同じです。

/* サブクエリ */

 SELECT 顧客コード,COUNT(DISTINCT 受注番号) FROM 受注表
        GROUP BY 顧客コード
        HAVING 受注個数 <
        (SELECT MIN(受注個数) FROM 受注表
         WHERE 顧客コード = '002');
/* 実行結果 */
顧客コード COUNT
───── ───
004        1
003        3

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


9 + = 13

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>