0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

EXISTS(SELECT NULL FROM ~)ってなんなん?

Posted at

業務で初めて知った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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?