研究MySQL我对MySQL中的运算符分类产生了一些困惑。
NOT
是一个逻辑运算符(Details)
而NOT LIKE, LIKE, IS NOT, IS NULL
是比较运营商。 (Details)
我无法理解真正的区别。
逻辑运算符的操作数是布尔值;而比较运算符可能具有任何类型的操作数。
比较运算符根据操作数类型集的排序测试其操作数之间的关系,并返回布尔结果: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。如果操作数为NOT NULL,则返回NULL。
简单来说: