与Java和SQL相比,为什么或条件的工作方式不同

Spi*_*ike 5 java sql conditional plsql if-statement

在Java中

int a = 10,b = 10;

if (a == 10 || b==10)
{
// first condition (a==10) is true, so it wont check further
}
Run Code Online (Sandbox Code Playgroud)

但是,在SQL中,

select * from my table where a = 10 or b = 10;

--As per my understanding, It should return data only based on a.
--But it returns both entries. 
Run Code Online (Sandbox Code Playgroud)

这是为什么?

Fen*_*ton 2

您正在描述提前终止 - 这意味着仅在答案未知时才执行第二条语句,但它不会改变结果(除非您在第二条语句中执行表达式)。

因此a == 10 || b == 10将导致 a 或 b 为 10 或 a 和 b 为 10 的任何结果。或更准确地说...

a = 10
b = 10
Run Code Online (Sandbox Code Playgroud)

或者

a = 10
b = 0
Run Code Online (Sandbox Code Playgroud)

或者

a = 0
b = 10
Run Code Online (Sandbox Code Playgroud)

如果 a 恰好是 10,那么您实际上不需要检查 b - 但某些语言仍然需要检查。