1. ホーム
  2. sql

[解決済み] SQLのWHERE句は短絡的に評価されるか?

2022-04-27 14:25:07

質問

SQLのWHERE句にブーリアン式は使えるか? 短絡的評価 ?

例えば、こんな感じです。

SELECT * 
FROM Table t 
WHERE @key IS NULL OR (@key IS NOT NULL AND @key = t.Key) 

もし @key IS NULL と評価されます。 true である。 @key IS NOT NULL AND @key = t.Key が評価されたのか?

ない場合は、なぜないのか?

もしそうなら、それは保証されているのでしょうか?それはANSI SQLの一部ですか、それともデータベース固有ですか?

データベース固有の場合、SQLServer?オラクル?MySQL?

解決方法は?

ANSI SQL Draft 2003 5WD-01-Framework-2003-09.pdf

<ブロッククオート

6.3.3.3 ルール評価順序

[...]

形式や優先順位が決定されない場合は、以下のようになります。 括弧は、一般に、式の効果的な評価を行います。 は、左から右の順に実行されます。ただし 実装に依存する 式が実際に左から右へ評価されるかどうか、特にオペランドや演算子によって 条件を発生させる または、式の結果が のすべての部分を完全に評価することなく決定することができます。 式になります。