副問合せ(サブクエリ)
副問合せとは、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)
helpful
この記事は役に立ちましたか?