EXISTS・NOT EXISTS(行の存在の判定)
更新日:
用語解説
EXISTS・NOT EXISTSは、SQLで、副問合せの結果に行があるかどうかを判定する述語です。
■ 試験で押さえるポイント
EXISTSは、副問合せの結果が1行でもあれば真になります。
NOT EXISTSは、副問合せの結果が0行のときに真になります。
相関副問合せと組み合わせて、「〜がある(ない)もの」を探します。
述語 | 副問合せの結果が1行以上 | 副問合せの結果が0行 |
|---|---|---|
EXISTS | 真(外側の行を残す) | 偽(外側の行を除く) |
NOT EXISTS | 偽(外側の行を除く) | 真(外側の行を残す) |
sql
SELECT 社員コード FROM 社員 X
WHERE NOT EXISTS
(SELECT * FROM 社員 Y WHERE X.社員コード = Y.上司)X.社員コード | Y.上司 = X.社員コード となる行(部下) | 副問合せの行数 | NOT EXISTS |
|---|---|---|---|
S001 | S002, S003 | 2行 | 偽(除く) |
S002 | なし | 0行 | 真(残す) |
S003 | S004 | 1行 | 偽(除く) |
■ 過去問での着眼点
NOT EXISTSで、「注文のない顧客」のような条件を書けるようにします。
例: 注文の表に行がない顧客を、NOT EXISTSで検索します。