Open2

SQLにおけるEXISTSの使い方

naon708naon708

Rails の ActiveRecord の exists? メソッドは使ったことがあるが SQL は初なのでメモ。

  • 句(clause)
  • 条件に当てはまるレコードの有無(boolean)
  • 必ずサブクエリと併用される
naon708naon708

テーブル同士を紐づけるか否かで出力されるデータが異なります。

紐づけを行わない場合は、サブクエリ(EXISTSの後ろに書かれる括弧の内側のSQLクエリ)で条件にあてはまる値が存在した場合に、メインクエリ(外側のSQLクエリ)が実行されます。値が存在しない場合は、メインクエリは実行されません。これを「存在判定」といいます。

一方で、紐づけを行う場合は、メインクエリが実行されてからサブクエリがメインクエリを参照して実行されます。これを「相関副問合せ」といいます。

参考: https://techmania.jp/blog/sql-exists/

  • outer table に紐づかせて検索等したい場合は紐づけを行う