7.1 サブクエリとは

まずはサブクエリの考え方と基本的な使用方法を説明します。

7.1.1 サブクエリとは

データベースに対する処理の命令要求(DML文の実行)をクエリといいます。 SQLでは、あるクエリ(サブクエリ)の実行結果を基に、別のクエリ(メインクエリ)を制御することができます。下図を見てください。

この例では、サブクエリのSELECT文の検索結果を、メインクエリの検索条件としています。このように、クエリを入れ子にしてサブクエリの実行結果を基にメインクエリを処理することができるのです。サブクエリには様々な使い方がありますので、次項以降で具体的な例で説明していきます。

7.1.2 サブクエリの具体例

まずサブクエリの中では最も基本となる、SELECT文の「WHERE」句で使う方法を、具体的な例を見ていきながら説明します。基本的な構文は下記のようになります。

    SELECT 列名 FROM テーブル名 WHERE 列名 演算子 サブクエリ

「bookinfo」を例にして説明します。ISBN番号「00001」の「SQL入門テキスト」と同じ価格の書籍を検索したい場合を考えます。まず「SQL入門テキスト」の価格を検索する必要があります。DML文は下記のようになりますね。

   SELECT price FROM bookinfo WHERE isbn = '00001';

これで「SQL入門テキスト」の価格が抽出できます。

さらに同一価格の書籍を抽出するには、

   SELECT * FROM bookinfo WHERE price = 1050;

となります。

この2つのDML文

   SELECT price FROM bookinfo WHERE isbn = '00001';→SQL①
   SELECT * FROM bookinfo WHERE price = 1050;→SQL②

を、「SQL①」をサブクエリ、「SQL②」をメインクエリとしてひとつにまとめると、下記のようなDML文になります。

   SELECT * FROM bookinfo WHERE price = (SELECT price FROM bookinfo WHERE isbn = '00001');

ではISBN番号「00002」の「Java Struts基礎テキスト」より価格の高い書籍を抽出したい場合はどうなるでしょうか?DML文は下記のようになります。

   SELECT * FROM bookinfo WHERE price > (SELECT price FROM bookinfo WHERE isbn = '00002');