generated at
EXISTS述語
特定のtableのcolumnの値が、別のtableのcolumnに存在するかどうかを確認したい時に使う
SQLのWHERE句の中に書く
EXISTSの中にはsubqueryを書く


EXISTSの中で見るtableとJOINしているかどうかで挙動が変わる
結合しない場合、exists内のSQLで値が存在したとき、外側のSQLが実行される
exists内のSQLで値が存在しないときは、外側のSQLは実行されない
存在判定
結合した場合、外側のSQLが実行されてexists内のSQLが実行される
こんなわけわからん命名したの誰やねんmrsekut



NOT EXISTS LEFT JOINで代用できるので使わない
パフォーマンス的にはどうなんだろう #??
Oracleでは全く同じという記事を見かけたmrsekut


subqueryって何を返すの?
0/1でいいの?
existsって述語だから返り値はbooleanだと思うけど、
subqueryが SELECT * .. だとちょっとわかりにくい気がする
SELECT 1 .. でいいのかな
というか理想的には SELECT 句自体が不要な気がする
構文として正しいのかわからないけど


sql
SELECT * FROM table_a AS ta WHERE EXISTS ( SELECT 1 FROM table_b AS tb WHERE tb.col1 = ta.col1 );
tb.col1の中にta.col1と同じ値があれば、それを取得する
taの中から、条件にあるものを取りたい
その条件が、tb.col1と同じものであるかどうか



NOT EXISTS とかは、JOIN使えば代替できそうな気がするけどどうなんだろう #??
パフォーマンス的にもどちらが良いのだろう