記事の概要
- mysqlの
where exist
構文の作りが理解できなかったため、調査した話。
疑問点
SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);
というようなsqlを見て構文の構成が不明だったので、色々試していたら、
SELECT column1 FROM t1 WHERE '1';
を実行すると、対象テーブルt1の全レコード取得
SELECT column1 FROM t1 WHERE '0';
を実行すると、0行の実行結果となった。
え?where句って、column=1
みたいな記載じゃなくても動くの??
調査結果
mysql公式のwhereステートメント説明を見ると…
where_condition は、選択される各行に対して true に評価される式です。WHERE 句がない場合、このステートメントはすべての行を選択します。
||
つまり
select時に、一行一行に対してwhereの条件が一致するかを計算し、一致する場合trueを返す。
て事
||
ってことは…
SELECT column1 FROM t1 WHERE '1';
にすると、全行がtrueをみなすような形になり、全行返却されるのか!!
納得
上記理解できたので、where existの作りも理解できた
ただ考察も含まれているので、違う可能性もあります。
(先輩たち、間違った事言ってたら教えてください )