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

PHP*_*ver 3 mysql sql not-operator

我在 MySQL 中运行以下查询:

SELECT * FROM Customers
WHERE NOT Country='Germany' AND NOT Country='USA';
Run Code Online (Sandbox Code Playgroud)

它返回了我完全正确的预期结果。

之后我运行以下查询:

SELECT * FROM Customers
WHERE NOT (Country='Germany' AND Country='USA');
Run Code Online (Sandbox Code Playgroud)

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

我不明白为什么 NOT 运算符在第二个带括号的查询中不起作用?

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

https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_where_not_and
Run Code Online (Sandbox Code Playgroud)

peu*_*feu 7

你被操作员优先级所困扰了。你瞧,括号是你的朋友。

WHERE NOT Country='Germany' AND NOT Country='USA';
Run Code Online (Sandbox Code Playgroud)

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

WHERE (NOT Country='Germany') AND (NOT Country='USA');
Run Code Online (Sandbox Code Playgroud)

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

WHERE Country!='Germany' AND Country!='USA';
Run Code Online (Sandbox Code Playgroud)

正如其他人指出的那样,它看起来更好,如下所示:

WHERE Country NOT IN ('Germany', 'USA');
Run Code Online (Sandbox Code Playgroud)

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

WHERE NOT (Country='Germany' AND Country='USA');
Run Code Online (Sandbox Code Playgroud)

国家不能同时是德国和美国,因此 () 内的内容始终为 FALSE,因此这相当于:

WHERE NOT (FALSE);
Run Code Online (Sandbox Code Playgroud)

IE

WHERE TRUE;
Run Code Online (Sandbox Code Playgroud)

即,你得到了整张桌子。