MySQLのWHERE句の短絡評価Zennshu1007🤔MySQLのWHERE句の短絡評価2021/09/09に公開MySQLSQLtech最近以下のサイトで遊んでいます。その中で出会ったSQLの挙動について書きます。2);上記のようなクエリを考えてみます。これは正しく実行されhogeテーブルの内容が単純にSELECTされます。2);今度はORの左辺を1=0とします。rowとエラーが発生しました。この2つのクエリから以下の挙動が理解できます。2)は評価されるとエラーとなるORの両方は必ずしも評価されない。短絡評価されることがある。評価は順番通りじゃない冒頭で紹介したサイトの問題でSQLのエラーが出た場合に画面の表示が変わるのでそれを手がかりにパスワードを探索する問題がありました。そこで上記の実験をした後以下のようなクエリを試します。2);するとこれはエラーとなってしまいました。予想では左から順番に評価され、ORの左辺の条件がtrueならば短絡評価で右辺は実行されないと思いましたがどうやらそうではないようです。クエリのオプティマイザが軽量なものから評価するようにしていると仮定すると右辺は定数をSELECTしているだけなので先に評価される気がします。length(pw));と書き換えてみます。すると左辺が評価され左辺がtrueの場合には短絡評価されエラーが出なくなりました!まとめ挙動の理由は予想までではっきりと根拠までは調べられていません。想定通りに短絡評価されないことがあるという紹介でした。他のDBだとどういう挙動になるかなども興味がありますが今回は調べられていません。以下に今回実験したクエリの内容をおいておきます。https://www.db-fiddle.com/f/dKTit2o6wSZUENwtK4sWdy/2shu1007バッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。