広告 SQL

【SQL】副問合せ(サブクエリ)の使い方

副問合せ(サブクエリ)

副問合せとは、SELECT文の中にSELECT文を入れ子状態に埋め込むことをいい、サブクエリとも呼ばれています。

副問合せは、SELECT句やFROM句、WHERE句、HAVING句で利用できます。

副問合せの基本構文

・SELECT句の例

SELECT  列名,  (SELECT~)  AS  A  FROM  テーブル名  WHERE  条件;

・FROM句の例

SELECT  A.列名  FROM  (SELECT~)  A  WHERE  条件;

・WHERE句の例

SELECT  列名  FROM  WHERE  列名 =  (SELECT~)

※(SELECT~):副問合せ

スポンサーリンク

本記事では、副問合せの使い方について紹介しています。

また「user」テーブルと「department」テーブルには、次のようなデータが格納されていることを前提としています。

■userテーブル

ID (id) ※PK商品名 (name)住所(address)年齢(age)部署ID(department_id)
1001鈴木一郎東京都441
1002佐藤次郎埼玉県321
1003田中三郎千葉県244
1004伊藤四郎東京都222
1005斎藤五郎東京都352

■departmentテーブル

ID (id) ※PK部署名(name)
1営業部
2開発部
3総務部

副問合せの例1:INを用いた副問合せ

次のSQLはINを用いた副問合せの例です。

■SQL例

SELECT
    *
FROM
    department
WHERE
    id IN
    (
        SELECT
            department_id
        FROM
            user
        WHERE
            address = '東京都'
    );

■実行結果

+----+--------+
| id | name   |
+----+--------+
|  1 | 営業部 |
|  2 | 開発部 |
+----+--------+
2 rows in set (0.01 sec)

副問合せの例2:EXISTSを用いた副問合せ

次のSQLはEXISTSを用いた副問合せの例です。

■SQL例

SELECT
    *
FROM
    department
WHERE
    EXISTS
    (
        SELECT
            *
        FROM
            user
        WHERE
            department.id = user.department_id
    );

■実行結果

+----+--------+
| id | name   |
+----+--------+
|  1 | 営業部 |
|  2 | 開発部 |
+----+--------+
2 rows in set (0.01 sec)

helpful