業務で初めて知ったEXISTSの使い方と、
どうしても理解しがたかったSELECT NULL FROM ~についてまとめます。
EXISTSとは
副問い合わせのレコードが1つでもあれば真(TRUE)、1つもなければ偽(FALSE)を返します。
-- 例
SELECT * FROM [Aテーブル]
WHERE EXISTS(
SELECT * FROM [Bテーブル]
WHERE ~
)
副問い合わせでレコードが存在したとき、主問い合わせが実行されます。
副問い合わせでレコードが存在しないとき、主問い合わせは実行されません。
今回頭を悩ませたSQL
SELECT 〜 FROM [Aテーブル], [Bテーブル], [Cテーブル]
WHERE EXISTS(
SELECT NULL FROM [Dテーブル]
WHERE B.◯◯ = D.××
AND B.◯◯ = D.△△
AND C.□□ = 1
)
ざっくりこのような感じです。
SELECT NULLってなに?NULLを取得?
副問い合わせの取得条件は B.◯◯ が NULL でした。
取得条件NULLでNULLのレコードが取得できる?から
副問い合わせのレコードは存在している?
とかトンチンカンなこと考えていました。
調べてもよく分かりませんでした。。
SELECT NULLって??
「SELECT NULL」はEXISTSと一緒に使われて
EXISTS(SELECT NULL FROM ~)で、副問い合わせのレコードがあるなら真(TRUE)だそうです。
(正直答えを見てもよく理解できなかった。。)
そのため今回はレコードがないため主問い合わせは実行されないということでした。
さいごに
もう少しSQLの勉強をするのと、調べる際に英語の記事を避けないように心がけます。
##参考
SELECT NULLの回答
→https://stackoverflow.com/questions/4875745/usage-of-select-null
EXISTSについて
→https://itsakura.com/sql-exists