尽管 SELECT 语句可以从表中获取数据,但您通常不需要每一行数据。设想一个有数千条记录的 Customers 表;您可能只想查看特定城市的客户,或在某个日期之后注册的客户。获取所有数据并手动筛选既低效又不切实际。这就是 WHERE 子句发挥作用的地方。它作为 SELECT 语句的过滤器,让您能够指定行必须满足的条件,以便包含在结果集中。可以把它看作是为您数据获取设置的标准。基本语法WHERE 子句在 SELECT 语句中位于 FROM 子句之后:SELECT column1, column2, ... FROM table_name WHERE condition;condition 部分是您定义筛选逻辑的地方。该条件对表中的每一行进行真假判断。只有条件为真的行才会被返回。使用比较运算符定义条件最常见的方法是使用比较运算符。这些运算符将列中的值与指定值进行比较。假设我们有一个简单的 Products 表:产品ID名称类别价格库存量1LaptopElectronics1200502Coffee MugHome Goods152003T-ShirtClothing251504SmartphoneElectronics800755NotebookStationery55006JeansClothing60100以下是标准比较运算符以及使用我们 Products 表的示例:= (等于): 查找列值与指定值完全匹配的行。请注意,文本值(字符串)通常用单引号 (' ') 括起来。-- 查找 'Clothing' 类别的产品 SELECT Name, Price FROM Products WHERE Category = 'Clothing';结果: T恤, 牛仔裤<> 或 != (不等于): 查找列值与指定值不匹配的行。这两个运算符通常都有效,但 <> 是标准 SQL。-- 查找不在 'Electronics' 类别的产品 SELECT Name, Category FROM Products WHERE Category <> 'Electronics';结果: 咖啡杯, T恤, 笔记本, 牛仔裤> (大于): 查找列值在数值上或字母顺序上大于指定值的行。-- 查找价格高于100美元的产品 SELECT Name, Price FROM Products WHERE Price > 100;结果: 笔记本电脑, 智能手机< (小于): 查找列值小于指定值的行。-- 查找库存量小于100件的产品 SELECT Name, StockQuantity FROM Products WHERE StockQuantity < 100;结果: 笔记本电脑, 智能手机>= (大于或等于): 查找列值大于或等于指定值的行。-- 查找价格为800美元或更高的产品 SELECT Name, Price FROM Products WHERE Price >= 800;结果: 笔记本电脑, 智能手机<= (小于或等于): 查找列值小于或等于指定值的行。-- 查找价格为25美元或更低的产品 SELECT Name, Price FROM Products WHERE Price <= 25;结果: 咖啡杯, T恤, 笔记本使用逻辑运算符组合条件通常,您需要基于多个条件进行筛选。SQL 提供了逻辑运算符(AND、OR、NOT)来在 WHERE 子句中组合多个条件。AND: 要求所有关联条件都为真,行才能被包含。-- 查找价格低于1000美元的“电子产品”类别产品 SELECT Name, Price FROM Products WHERE Category = 'Electronics' AND Price < 1000;结果: 智能手机(它是“电子产品”并且价格低于1000美元)OR: 要求至少一个关联条件为真,行才能被包含。-- 查找属于“服装”类别或价格低于10美元的产品 SELECT Name, Category, Price FROM Products WHERE Category = 'Clothing' OR Price < 10;结果: T恤, 笔记本, 牛仔裤(T恤和牛仔裤符合类别条件,笔记本符合价格条件)NOT: 反转条件的结果。它常与其他运算符(如 IN 或 LIKE,接下来会讨论)一起使用,但也可否定简单的比较。-- 查找不是“服装”类别的产品 SELECT Name, Category FROM Products WHERE NOT Category = 'Clothing'; -- 这等同于:WHERE Category <> 'Clothing'结果: 笔记本电脑, 咖啡杯, 智能手机, 笔记本混合使用 AND 和 OR 时,您可以使用括号 () 来控制求值顺序,就像在数学中一样。括号内的条件会首先被求值。-- 查找电子产品 或 (价格高于50美元的服装类产品) SELECT Name, Category, Price FROM Products WHERE Category = 'Electronics' OR (Category = 'Clothing' AND Price > 50);结果: 笔记本电脑, 智能手机, 牛仔裤其他有用的筛选运算符SQL 提供更多专门的运算符来处理常见的筛选任务:BETWEEN: 检查值是否在指定范围内(包含边界值)。-- 查找价格在50美元到100美元之间(包含)的产品 SELECT Name, Price FROM Products WHERE Price BETWEEN 50 AND 100;结果: 牛仔裤IN: 检查值是否与提供列表中的任何值匹配。这通常比使用多个 OR 条件更简洁。-- 查找“家居用品”、“文具”或“服装”类别的产品 SELECT Name, Category FROM Products WHERE Category IN ('Home Goods', 'Stationery', 'Clothing');结果: 咖啡杯, T恤, 笔记本, 牛仔裤LIKE: 对字符串值进行简单的模式匹配。它使用通配符:%: 代表零个、一个或多个字符。_: 代表恰好一个字符。-- 查找名称以 'L' 开头的产品 SELECT Name FROM Products WHERE Name LIKE 'L%';结果: 笔记本电脑-- 查找名称以 't' 结尾的产品 SELECT Name FROM Products WHERE Name LIKE '%t';结果: 笔记本电脑, T恤, 笔记本-- 查找名称第二个字母是 'o' 的产品 SELECT Name FROM Products WHERE Name LIKE '_o%';结果: 咖啡杯, 笔记本数据类型很重要请记住,在编写条件时,您需要遵循列的数据类型:字符串 (文本): 用单引号括起值(例如,'Electronics')。大小写敏感性(例如,'Electronics' 是否与 'electronics' 匹配)取决于具体的数据库系统及其配置。数字: 不要用引号括起值(例如,1200,15.99)。日期: 通常用引号括起,但所需的格式(例如,'YYYY-MM-DD')在不同的数据库系统(如 MySQL、PostgreSQL、SQL Server)之间有很大差异。有效使用 WHERE 子句是处理数据库的根本。它将 SELECT 从一个获取所有数据的粗略工具,转变为一个基于特定标准精确提取所需信息的工具。随着您的练习,您会发现它对于提出有意义的数据问题是不可或缺的。