EXISTSとNOT EXISTS その2
EXISTSとは副問い合わせの結果が存在するかどうかを判定し、NOT EXISTSは副問い合わせの結果が存在しないかどうかを判定する。
・対象テーブルに関する条件なし
判定が真の場合はテーブルの全データを取得
判定が偽の場合はデータを取得しない
testdb=# \d zooA
Table "public.zooa"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
name | text | | |
num | integer | | |
testdb-# \d animal
Table "public.animal"
Column | Type | Collation | Nullable | Default
--------+------+-----------+----------+---------
name | text | | |
testdb=# SELECT * FROM zooA;
name | num
----------+-----
パンダ | 1
ライオン | 2
ゾウ | 2
サル | 15
(4 rows)
testdb=# SELECT * FROM animal;
name
----------
コアラ
キリン
ライオン
チーター
イノシシ
サル
(6 rows)
testdb=# SELECT name FROM animal WHERE NOT EXISTS (SELECT name FROM zooA WHERE num = 15);
name
------
(0 rows)
(SELECT name FROM zooA WHERE num = 15)
上記から、副問い合わせには対象テーブル「animal」に関する条件が指定されていないことが分かります。
副問い合わせで取得されるデータは1件以上であり、判定は偽となることからデータは取得されません。