SQL WHERE 句の評価: ショートサーキットの説明
SQL の WHERE
句に関するよくある質問は、ブール式の評価に関するものです。SQL は短絡評価を採用していますか? これは、結果が確実になるとすぐに評価が停止し、式の後の部分がバイパスされる可能性があることを意味します。
ANSI SQL 標準と評価順序
ANSI SQL 標準では、WHERE
句の短絡評価を明示的に定義していません。 ANSI SQL ドラフト 2003 では、式の評価順序が実装に依存することが指定されています。 これにより、ショートサーキットを実装するかどうかの決定は個々のデータベース ベンダーに委ねられます。
データベース固有の実装
したがって、短絡動作はデータベース システムによって大きく異なります。
AND
および OR
演算子の短絡評価をサポートします。OPTIMIZER_MODE
ヒントを使用して有効にできます。AND
演算子の短絡評価のみをサポートします。具体例
次のクエリについて考えてみましょう:
<code class="language-sql">SELECT * FROM Table t WHERE @key IS NULL OR (@key IS NOT NULL AND @key = t.Key) </code>
@key
が NULL
の場合、最初の条件 (@key IS NULL
) は TRUE
です。 SQL Server では、全体的な結果がすでにわかっているため、短絡評価では 2 番目の条件 (@key IS NOT NULL AND @key = t.Key
) がスキップされます。
重要なポイント
ANSI SQL 標準では、WHERE
句での短絡評価は保証されていません。 その存在と動作はデータベースに固有です。 評価戦略を理解するには、必ずデータベース システムのドキュメントを参照してください。
以上がSQL は WHERE 句での短絡評価を保証しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。