OR,AND与mysql中的位置之间的区别

Ven*_*tta 0 mysql where-clause

我正在学习Mysql

但是在下面的例子后我感到困惑:

select * from `users` where username = 'admin' or true;
Run Code Online (Sandbox Code Playgroud)

这里它返回了users表中的所有行!

(username ='admin'或true)应该是真的吗?所以哪里是真的

但在这个例子中:

select * from `users` where username = 'admin' and true;
Run Code Online (Sandbox Code Playgroud)

它返回了一行(其中username ='admin')

但是(用户名='admin'和true)也应该是真的!

那有什么区别?

ste*_*fen 6

-- this is always true
WHERE 1 

-- this is only true for rows where the username is admin
WHERE username = 'admin'
Run Code Online (Sandbox Code Playgroud)

现在查看这个真值表:

x  y | x and y | x or y
-----------------------
F  F |    F    |   F
F  T |    F    |   T
T  F |    F    |   T
T  T |    T    |   T
Run Code Online (Sandbox Code Playgroud)

https://en.wikipedia.org/wiki/Boolean_algebra

如果你采取

  • xWHERE username = 'admin'
  • y 对于 WHERE 1

你应该了解结果.