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 鈴木一郎 東京都 44 1
1002 佐藤次郎 埼玉県 32 1
1003 田中三郎 千葉県 24 4
1004 伊藤四郎 東京都 22 2
1005 斎藤五郎 東京都 35 2

■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)

よろしければ記事の評価をお願いします

© 2021 ITを分かりやすく解説