SQL EXISTS文でデータが存在するかチェックを行う
「社員マスタ」と「売上明細」というテーブルがあります。売上明細テーブルには、社員の売上情報が格納されています。
社員コード | 社員名 | 部署コード | 年齢 |
---|---|---|---|
1 | テスト社員1 | 1 | 22 |
2 | テスト社員2 | 2 | 30 |
3 | テスト社員3 | null | 20 |
4 | テスト社員4 | 2 | 30 |
売上NO | 社員コード | 売上日 | 売上金額 |
---|---|---|---|
1 | 1 | 20150401 | 200 |
2 | 1 | 20150402 | 300 |
3 | 2 | 20150408 | 100 |
4 | 2 | 20150501 | 150 |
5 | 3 | 20150505 | 550 |
売上のある社員のみ表示したい。
SQL
は下記のようになります。
SELECT 社員名
FROM 社員マスタ AS T1
WHERE EXISTS(
SELECT 1
FROM 売上明細 AS S1
WHERE T1.社員コード = S1.社員コード)
--↓EXISTSを使わない場合
SELECT MAX(T1.社員名) AS 社員名
FROM 社員マスタ AS T1
JOIN 売上明細 AS T2
ON T1.社員コード = T2.社員コード
GROUP BY T1.社員コード
社員名 |
---|
テスト社員1 |
テスト社員2 |
テスト社員3 |
データが存在するかどうかの条件を行いたい場合はEXISTS
を使用します。
売上金額を表示したい場合は、FROM
句で売上明細テーブルを指定する必要がありますが、今回のように、存在チェックの条件で使用したいだけの場合は、WHERE
句でEXSITS
を指定するだけでいいので、わざわざGROUP BY
を使う必要もなくなります。
1つのSQL
文の中に、入れ子でSQL
を指定することを「副問い合わせ」と呼びます。「副問い合わせ」に関してはSQL 副問い合わせの基本を理解するで詳しく扱います。