当前位置: 首页 > 面试题库 >

是否对SQL WHERE子句进行了短路评估?

公良子轩
2023-03-14
问题内容

是否在SQL WHERE子句中对布尔表达式进行短路求值 ?

例如:

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

如果 @key IS NULL的 计算结果为true,则 @key不是NOT AND @key = t.Key的 计算结果吗?

如果否,为什么不呢?

如果是,是否可以保证?它是ANSI SQL的一部分还是特定于数据库的?

如果是特定于数据库的SqlServer?甲骨文?MySQL的?


问题答案:

ANSI SQL草稿2003 5WD-01-Framework-2003-09.pdf

6.3.3.3规则评估顺序

[…]

如果优先级不是由格式或括号确定的,则通常从左到右执行表达式的有效评估。但是, 取决于 表达式是否实际上是从左到右求值,这 取决于实现
,特别是在操作数或运算符可能导致条件升高 或是否可以在不完全评估表达式的所有部分的情况下确定表达式的结果时。



 类似资料:
  • 我相信C#一旦能够判断结果,就会停止评估if语句条件。例如: 由于条件

  • 问题内容: 我想知道JavaScript是否具有C#中的&&运算符之类的“短路”评估。如果没有,我想知道是否有一种合理的解决方法可以采用。 问题答案: 是的,JavaScript具有“短路”评估。

  • 问题内容: 给出以下代码: 如果返回,php解释器是否还会检查以后的条件,例如? 如果是这样,那么为什么它在不需要时会做额外的工作呢? 问题答案: 是的,PHP解释器是“惰性”的,这意味着它将尽可能少地进行比较以评估条件。 如果要验证,请尝试以下操作:

  • 问题内容: 我可以在MySQL 5.5的子句中使用任何短路逻辑运算符(特别是短路和短路)吗?如果没有,那还有什么选择? 在这个小提琴中可以找到关于我的问题的抽象观点以及对我为什么需要它的解释: http://sqlfiddle.com/#!2/97fd1/3 实际上,我们正在数百个国家/地区的数以千计的城市中的数百万家书店中查找数百万本图书,这就是为什么我们无法接受我们发送的每个查询都收到不必要信

  • 问题内容: 我希望使用Python函数来帮助我进行计算,但是如果击中a时不立即求值,则该过程可能会花费更长的时间。我认为这可能是经过短路评估的,但我只是想确定一下。另外,有没有一种方法可以在Python中说明如何评估函数? 问题答案: 是的,它会短路: 从文档: 如果iterable的所有元素都为true(或者iterable为空),则返回True。相当于: 因此,当它为False时,该函数立即中

  • 问题内容: 这是我在处理Django项目时出现的一个问题。关于表单验证。 在Django中,当您提交表单时,可以调用相应的表单对象以触发验证并返回布尔值。因此,通常在视图函数中有类似的代码: 不仅可以验证表单数据,还可以向表单对象添加错误消息,这些错误消息随后可以显示给用户。 在一页上,我同时使用两种形式,并且还希望仅当两种形式均包含有效数据时才保存数据。这意味着我必须在执行代码以保存数据之前在两