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

时间:2016-01-27 15:38:29

标签: mysql where-clause

我正在学习Mysql

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

select * from `users` where username = 'admin' or true;

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

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

但是在这个例子中:

select * from `users` where username = 'admin' and true;

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

但是(username ='admin'和true)也应该是真的!

那有什么区别?

4 个答案:

答案 0 :(得分:6)

-- this is always true
WHERE 1 

-- this is only true for rows where the username is admin
WHERE username = 'admin'

现在查看truth table

x  y | x and y | x or y
-----------------------
F  F |    F    |   F
F  T |    F    |   T
T  F |    F    |   T
T  T |    T    |   T

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

如果你选择

  • x代表WHERE username = 'admin'
  • {li> y WHERE 1

你应该了解结果。

答案 1 :(得分:3)

你应该以不同的方式阅读它。

该条款检查用户名是否等于' admin'。

阅读如下

(username = 'admin') and (1)

(username = 'admin') or (1)

所以第二个将返回数据库中的所有值,因为它会检查是否满足条件1或2。条件2总是正确的。

WHERE 1 

答案 2 :(得分:1)

Mysql将1视为true因此它是简单逻辑 - expression OR true将始终为真(因此您获得所有行)并且expression AND true等同于expression,因此你只得到符合你条件的rowa

它看起来有点奇怪,但是mysql检查每行的expression(包括1)fpr,即使1不是表的一部分。仍然认为是否决定是否选择每一行

答案 3 :(得分:1)

In a room there are 10 people.
1 is a woman, the rest are men.

How many in the room are People OR Women = 10. 
How many in the room are People AND Women = 1. 
How many in the room are People AND Men = 9. 
How many in the room are Men OR Women = 10. 
How many in the room are Men AND Women = 0.       
  In todays day and age, this is questionable ;)

Still I hope it helps