EXISTSとNOT EXISTSは、サブクエリと組み合わせて使用される条件演算子です。
これらは、特定の条件を満たす行がサブクエリの結果セット内に存在するかどうかを確認するために使用されます。
EXISTS / NOT EXISTS
記述
SELECT カラム名 FROM テーブル名 WHERE EXISTS ( [入れ子にするSELECT文] );
mysql> SELECT * FROM users;
+----+-------+--------+
| id | name | job_id |
+----+-------+--------+
| 1 | user1 | 1 |
| 2 | user2 | 2 |
| 3 | user3 | 1 |
| 4 | user4 | 3 |
| 5 | user5 | 2 |
+----+-------+--------+
5 rows in set (0.00 sec)
mysql> SELECT * FROM jobs;
+----+----------------------+
| id | job |
+----+----------------------+
| 1 | programmer |
| 2 | web designer |
| 3 | security engineer |
+----+----------------------+
3 rows in set (0.00 sec)
【web programmerのユーザー情報取得】
mysql> SELECT * FROM users WHERE EXISTS (
-> SELECT * FROM jobs
-> WHERE job_id = jobs.id AND jobs.job = 'web programmer'
-> );
+----+-------+--------+
| id | name | job_id |
+----+-------+--------+
| 1 | user1 | 1 |
| 3 | user3 | 1 |
+----+-------+--------+
2 rows in set (0.00 sec)
【web programmer以外のユーザー情報取得】
mysql> SELECT * FROM users WHERE NOT EXISTS (
-> SELECT * FROM jobs
-> WHERE job_id = jobs.id AND jobs.job = 'web programmer'
-> );
+----+-------+--------+
| id | name | job_id |
+----+-------+--------+
| 2 | user2 | 2 |
| 4 | user4 | 3 |
| 5 | user5 | 2 |
+----+-------+--------+
3 rows in set (0.00 sec)