omachizura

SQLの基本的なことからスタートし、高度な検索・集計方法などの応用テクニックまでできるスキルを紹介します。


EXISTS文でデータが存在するかチェックを行う

「社員マスタ」と「売上明細」というテーブルがあります。売上明細テーブルには、社員の売上情報が格納されています。

社員マスタ
社員コード社員名部署コード年齢
1テスト社員1122
2テスト社員2230
3テスト社員3null20
4テスト社員4130
売上明細
売上NO社員コード売上日売上金額
1120150401200
2120150402300
3220150408100
4220150501150
5320150505550

課題

売上のある社員のみ表示したい。

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を指定することを「副問い合わせ」と呼びます。「副問い合わせ」に関しては 副問い合わせを理解する で詳しく扱います。





前へ
1

前へ
1