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件以上であり、判定は偽となることからデータは取得されません。

この記事が気に入ったらサポートをしてみませんか?