Skip to content

SQL Where

WHERE 子句用于从结果集中过滤记录。它指定了行必须满足的条件,才能包含在 SELECT、UPDATE 或 DELETE 语句的输出中。

当你查询一个表时,通常不需要所有行。WHERE 子句允许你只提取满足指定条件或一组条件的记录。

SELECT column1, column2, … FROM table_name WHERE condition;

condition 是一个表达式,对于每一行都会评估其结果为 true、false 或 unknown。只有条件为 true 的行才会被返回。

在这些示例中,我们将使用一个标准的 “Customers” 表。

“Customers” 表的部分数据示例如下:

CustomerID CustomerName ContactName Address City PostalCode Country

1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany

2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico

3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico

4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK

5 Berglunds snabbköp Christina Berglund Berguvsvägen 8 Luleå S-958 22 Sweden

以下 SQL 语句从 “Customers” 表中选择所有来自 “Mexico”(墨西哥)的客户:

SELECT *
FROM Customers
WHERE Country = 'Mexico';

此查询将返回示例数据中的第 2 行和第 3 行。

在 WHERE 子句中指定条件时:

  • **文本值(字符串)**必须用单引号括起来(例如 ‘Mexico’)。大多数数据库系统也允许使用双引号,但单引号是标准的 SQL 实践。
  • 数值不应加引号(例如 CustomerID = 1)。

数值字段示例:

SELECT CustomerName, City
FROM Customers
WHERE CustomerID = 1;

此查询将返回来自柏林的 Alfreds Futterkiste。

你可以在 WHERE 子句中使用各种运算符来定义条件:

运算符描述
=等于
<>不等于。(某些 SQL 版本也支持 !=)
>大于
<小于
>=大于或等于
<=小于或等于
BETWEEN检查值是否在包含指定边界的范围内(例如 Price BETWEEN 10 AND 20)。
LIKE搜索匹配特定模式的值(通常与通配符 ’%’ 或 ’_’ 一起使用)。
IN检查值是否匹配列表中的任何值(例如 Country IN (‘Germany’, ‘France’, ‘UK’))。
IS NULL检查值是否为 NULL。
IS NOT NULL检查值是否不为 NULL。

你还可以使用逻辑运算符 AND、OR 和 NOT 组合多个条件。这将在单独的章节中介绍。

实际应用:

WHERE 子句对于检索数据的特定子集、更新目标行或删除特定记录至关重要。例如,查找所有逾期发票、更新特定订单的状态或删除非活跃用户账户。