【发布时间】:2014-01-17 05:09:32
【问题描述】:
学习 MySQL 我对 MySQL 中的运算符分类有些困惑。
NOT 是一个逻辑运算符 (Details)
而NOT LIKE, LIKE, IS NOT, IS NULL 是比较运算符。 (Details)
我无法掌握真正的区别。
【问题讨论】:
标签: boolean operators logic terminology relation
学习 MySQL 我对 MySQL 中的运算符分类有些困惑。
NOT 是一个逻辑运算符 (Details)
而NOT LIKE, LIKE, IS NOT, IS NULL 是比较运算符。 (Details)
我无法掌握真正的区别。
【问题讨论】:
标签: boolean operators logic terminology relation
逻辑运算符的操作数是布尔值;而比较运算符可以有任何类型的操作数。
比较运算符根据操作数类型集上的排序测试其操作数之间的关系,并返回布尔结果:1 < 2、'hello' > 'aardvark' 、CURRENT_DATE = '2013-12-30'、'peanut' LIKE 'pea%'、'walnut' NOT LIKE 'pea%'、'' IS NOT NULL等
另一方面,布尔值没有可以建立这种关系的“顺序”*——例如,说FALSE < TRUE 是毫无意义的。相反,我们根据它们的“真实性”来考虑它们,并根据它们的逻辑有效性来考虑它们:TRUE AND TRUE、FALSE XOR TRUE、NOT FALSE 等。
当然,在很多情况下,同一个逻辑结果可以用多种方式表达——例如:
1 < 2 在逻辑上与2 > 1 和NOT (1 >= 2) 相同
'walnut' NOT LIKE 'pea%'在逻辑上与NOT ('walnut' LIKE 'pea%')相同
'' IS NOT NULL在逻辑上与NOT ('' IS NULL)相同
但是,否定比较涉及除了比较操作之外的逻辑操作(取反),而立即产生所需结果的单个比较操作通常更简洁/可读,并且可能更易于计算机优化。
* 某些语言(如 MySQL)没有真正的布尔类型,而是使用零和非零整数分别表示 FALSE 和 TRUE。因此,在它们的布尔值上确实存在排序,尽管这不会影响概念上的区别。
【讨论】:
简单地说,NOT LIKE, LIKE, IS NOT 用于比较两个值。例如:
SELECT * FROM `table_name` WHERE `name` NOT LIKE `examplename`;
SELECT * FROM `table_name` WHERE `key_col` IS NULL;
NOT 返回值的倒数。在大多数情况下,它与!= 相同。示例:
SELECT * FROM `student` WHERE NOT (student_id = 1);
如果操作数为 0,则运算符返回 1,如果操作数非零,则返回 0。如果操作数不是 NULL,则返回 NULL。
【讨论】:
简单来说:
比较运算符根据 ==、!=、>、=、
另一方面,逻辑运算符将通过比较运算符检查条件(大于1)返回,然后根据结果执行操作。
【讨论】: