副問合せ(サブクエリ)
副問合せとは、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」テーブルには、次のようなデータが格納されていることを前提としています。
ID (id) ※PK | 商品名 (name) | 住所(address) | 年齢(age) | 部署ID(department_id) |
1001 | 鈴木一郎 | 東京都 | 44 | 1 |
1002 | 佐藤次郎 | 埼玉県 | 32 | 1 |
1003 | 田中三郎 | 千葉県 | 24 | 4 |
1004 | 伊藤四郎 | 東京都 | 22 | 2 |
1005 | 斎藤五郎 | 東京都 | 35 | 2 |
ID (id) ※PK | 部署名(name) |
1 | 営業部 |
2 | 開発部 |
3 | 総務部 |
副問合せの例1:INを用いた副問合せ
次のSQLはINを用いた副問合せの例です。
SELECT * FROM department
WHERE id IN
(SELECT department_id FROM user WHERE address = '東京都');
■実行結果
+----+--------+
| id | name |
+----+--------+
| 1 | 営業部 |
| 2 | 開発部 |
+----+--------+
副問合せの例2:EXISTSを用いた副問合せ
次のSQLはEXISTSを用いた副問合せの例です。
SELECT * FROM department
WHERE EXISTS(
SELECT * FROM user WHERE department.id = user.department_id
);
■実行結果
+----+--------+
| id | name |
+----+--------+
| 1 | 営業部 |
| 2 | 開発部 |
+----+--------+
SQL副問合せ(サブクエリ)の使い方について解説しました。SQLを学習されている方へのお力になれれば幸いです。
学習書の紹介
イラストでそこそこわかるSQL SELECT文と並び替え・集約のきほんのきまで [ 坂下 夕里 ] 価格:2,750円 |
イラストでそこそこわかるSQL SELECT文と並び替え・集約のきほんのきまで
本書は「データをデータベースから取ってくる」操作に特化した、
SQLの解説書です。
本書は、データベースエンジニアではないけれど、「自分の思う通りにデータを取ってきたい」という方にお勧めの1冊です。
【こんな方にお勧めします】
・データ分析を始めたばかりの方
・分析力をアップしたいマーケター
・フロントエンドエンジニアやWebデザイナー
・表計算ソフトでのデータの抽出・分析に限界を感じている方
学習書のお求めは、こちらから → IT開発関連書とビジネス書が豊富な翔泳社の通販『SEshop』