NOT运算符可以处理括号中的多个条件吗?

时间:2017-03-30 18:40:10

标签: mysql sql not-operator

我在MySQL中运行以下查询:

SELECT * FROM Customers
WHERE NOT Country='Germany' AND NOT Country='USA';

它确切地给了我正确的预期结果。

之后我运行以下查询:

SELECT * FROM Customers
WHERE NOT (Country='Germany' AND Country='USA');

这次它返回了表格中的所有记录(查询SELECT * FROM Customers;的结果集)

我不明白为什么NOT运算符不能用括号进行第二次查询?

您可以访问此链接并查看:

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_where_not_and

4 个答案:

答案 0 :(得分:3)

是的,当然可以。但是,根据布尔逻辑的规则,正确的公式使用AND,而不是SELECT * FROM Customers WHERE NOT (Country = 'Germany' OR Country = 'USA');

WHERE NOT (Country = 'Germany' AND Country = 'USA');

你的条件是:

Country

显然,单行不能同时满足这两个条件,因为AND只有一个值。因此,每一行NOT计算结果为假,SELECT * FROM Customers WHERE Country NOT IN ('Germany', 'USA'); 将其变为真 - 所以不进行过滤。

更典型的写法是:

php artisan list

答案 1 :(得分:3)

您应该使用OR条件,因为同一列不能在任何时间点取多个值,因此您的条件必然会返回false。此外,您应该使用OR运算符

,而不是使用多个堆叠IN条件
WHERE Country IN ('Germany', 'USA');

(OR)

WHERE Country NOT IN ('Germany', 'USA');

您的当前状况将按以下方式评估:(Country='Germany' AND Country='USA')将返回falseNOT false将返回true。从而使您的WHERE部分true并返回所有结果

答案 2 :(得分:2)

你被操作员优先考虑了。你知道括号是你的朋友。

WHERE NOT Country='Germany' AND NOT Country='USA';

实际上意味着,因为NOT优先于AND:

WHERE (NOT Country='Germany') AND (NOT Country='USA');

由于“NOT a = b”是“a!= b”,这意味着:

WHERE Country!='Germany' AND Country!='USA';

正如其他人指出的那样,看起来好像这样:

WHERE Country NOT IN ('Germany', 'USA');

现在,下一个主题。这一个:

WHERE NOT (Country='Germany' AND Country='USA');

国家不能同时是德国和美国,所以()内的东西总是假的,所以这相当于:

WHERE NOT (FALSE);

WHERE TRUE;

即,你得到了整张桌子。

答案 3 :(得分:1)

SELECT * FROM Customers
WHERE NOT (Country='Germany' AND Country='USA');

这才是真正说的是这个记录同时不等于两者。你不可能有一行你有以下积极的一面:

(Country='Germany' AND Country='USA')

您可以通过以下方式获得所需的结果:

Where Country not in ('Germany', 'USA')