Skip to content

SQL And & Or

AND、OR 和 NOT 运算符用于 WHERE 子句中,根据多个条件过滤记录。这些运算符可以实现更复杂和精确的数据检索。

AND 运算符仅在所有由 AND 分隔的指定条件都为 TRUE 时显示记录。

OR 运算符在任何由 OR 分隔的指定条件为 TRUE 时显示记录。

NOT 运算符在条件为 NOT TRUE 时显示记录。它可用于排除特定记录。

对于本节中的示例,假设我们正在使用一个 Customers 表。该表包含 CustomerID、CustomerName、City、Country 和 PostalCode 等列。

以下 SQL 语句从 Customers 表中选择所有来自国家 ‘Germany’ AND 城市 ‘Berlin’ 的客户:

SELECT CustomerName, City, Country
FROM Customers
WHERE Country = 'Germany' AND City = 'Berlin';

此查询将只返回位于德国柏林的客户。其他德国城市的客户或全球其他地方的柏林的客户将不被包括在内。

以下 SQL 语句从 Customers 表中选择所有来自城市 ‘Berlin’ OR 城市 ‘London’ 的客户:

SELECT CustomerName, City, Country
FROM Customers
WHERE City = 'Berlin' OR City = 'London';

此查询将返回位于柏林的客户(无论哪个国家)以及位于伦敦的客户(无论哪个国家)。

以下 SQL 语句选择所有 NOT 来自国家 ‘USA’ 的客户:

SELECT CustomerName, Country
FROM Customers
WHERE NOT Country = 'USA';

或者,您可以使用 <> 或 != 运算符进行简单的否定:

SELECT CustomerName, Country
FROM Customers
WHERE Country <> 'USA';

您可以组合使用 AND、OR 和 NOT 运算符。组合这些运算符时,使用括号 () 来定义评估顺序并确保查询按预期执行非常重要。括号内的条件首先进行评估。

示例:选择来自 ‘Germany’ 且城市为 ‘Berlin’ OR ‘München’ 的客户。

Section titled “示例:选择来自 ‘Germany’ 且城市为 ‘Berlin’ OR ‘München’ 的客户。”

以下 SQL 语句选择所有来自国家 ‘Germany’ 且城市为 ‘Berlin’ OR ‘München’ 的客户:

SELECT CustomerName, City, Country
FROM Customers
WHERE Country = 'Germany' AND (City = 'Berlin' OR City = 'München');

如果没有括号,Country = 'Germany' AND City = 'Berlin' OR City = 'München' 将被解释为 (Country = 'Germany' AND City = 'Berlin') OR City = 'München',这也会包含来自 ‘München’ 的客户,无论他们属于哪个国家。这是一个常见的陷阱。

示例:选择 NOT 来自 ‘Germany’ AND NOT 来自 ‘USA’ 的客户。

Section titled “示例:选择 NOT 来自 ‘Germany’ AND NOT 来自 ‘USA’ 的客户。”
SELECT CustomerName, Country
FROM Customers
WHERE NOT (Country = 'Germany' OR Country = 'USA');

这也可以写成:

SELECT CustomerName, Country
FROM Customers
WHERE Country <> 'Germany' AND Country <> 'USA';

或者使用带有 NOT 的 IN 运算符:

SELECT CustomerName, Country
FROM Customers
WHERE Country NOT IN ('Germany', 'USA');

理解运算符优先级(NOT 最高,然后是 AND,然后是 OR)至关重要,但使用括号显式地对条件进行分组始终是提高清晰度和正确性的良好实践。