mysql - OR 和 AND 与 mysql 中 where 的区别

标签 mysql where-clause

我正在学习Mysql

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

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

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

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

但在这个例子中:

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

它返回一行(其中用户名 = 'admin')

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

那么有什么区别呢?

最佳答案

-- 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'
  • y 代表 WHERE 1

你应该明白结果。

关于mysql - OR 和 AND 与 mysql 中 where 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35041654/

相关文章:

sql - 如何在 SQL 查询 where 子句中指定多个值?

php - 查询不显示信息 : PDO, MYSQL, PHP

php - 带有条件和循环的 Laravel 下一个/上一个查询

php - 互斥 MySQL 全文搜索

c# - IN 子句与 WHERE 子句在 SQL Server 中未获得正确的结果

mysql - 从列表中值所在的列中选择或没有此类列

php - 读取大TXT到MYSQL超时

database - Mysql慢查询: JOIN + multiple WHERES + ORDER BY

sql - 将 WHERE 子句添加到 Zend_Validate_Db_NoRecordExists

mysql - 带有索引列的 WHERE 子句中的 "CASE WHEN"