詳細はSQL EXISTS演算子です。


EXISTS演算子
EXISTS演算子は、クエリのサブフレーズが記録されているかどうかを判断するために使用されます。一つ以上のレコードがあれば、Trueに戻ります。そうでなければ、Falseに戻ります。
SQL EXISTS文法

SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);
プレゼンテーションデータベース
本教程では、RUNOOBサンプルデータベースを使用します。
以下は「Websites」表から選択したデータです。

+----+--------------+---------------------------+-------+---------+
| id | name     | url            | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google    | https://www.google.cm/  | 1   | USA   |
| 2 |       | https://www.taobao.com/  | 13  | CN   |
| 3 |      | http://www.runoob.com/  | 4689 | CN   |
| 4 |       | http://weibo.com/     | 20  | CN   |
| 5 | Facebook   | https://www.facebook.com/ | 3   | USA   |
+----+--------------+---------------------------+-------+---------+
次は「access_」ですロゴマーク「ウェブサイトアクセス記録表のデータ:

mysql> SELECT * FROM access_log;
+-----+---------+-------+------------+
| aid | site_id | count | date    |
+-----+---------+-------+------------+
|  1 |    1 |  45 | 2016-05-10 |
|  2 |    3 |  100 | 2016-05-13 |
|  3 |    1 |  230 | 2016-05-14 |
|  4 |    2 |  10 | 2016-05-14 |
|  5 |    5 |  205 | 2016-05-14 |
|  6 |    4 |  13 | 2016-05-15 |
|  7 |    3 |  220 | 2016-05-15 |
|  8 |    5 |  545 | 2016-05-16 |
|  9 |    3 |  201 | 2016-05-17 |
+-----+---------+-------+------------+
9 rows in set (0.00 sec)
SQL EXISTSの例
総アクセス量(countフィールド)が200より大きいウェブサイトが存在するかどうかを調べたいです。
以下のSQL文を使います。

SELECT Websites.name, Websites.url 
FROM Websites 
WHERE EXISTS (SELECT count FROM access_log WHERE Websites.id = access_log.site_id AND count > 200);
上記のSQL出力を実行した結果は以下の通りです。

EXISTSはNOTと一緒に使用できます。クエリ文に合わないレコードを検索します。

SELECT Websites.name, Websites.url 
FROM Websites 
WHERE NOT EXISTS (SELECT count FROM access_log WHERE Websites.id = access_log.site_id AND count > 200);
上記のSQL出力を実行した結果は以下の通りです。

以上がSQL EXISTS演算子の詳細です。SQL EXISTS演算子に関する資料は他の関連記事に注目してください。