MySQL的WHERE子句是SQL查询语句中用于筛选数据的重要部分,它可以在查询过程中过滤掉不符合指定条件的数据行,只返回满足要求的结果。无论是简单的单条件筛选,还是复杂的多条件组合查询,WHERE子句都是实现精准数据获取的核心工具。

WHERE子句的基本语法
WHERE子句通常跟在SELECT语句的FROM子句之后,基本结构如下:
-- 基本查询语法 SELECT 列名1, 列名2, ... FROM 表名 WHERE 筛选条件;
其中筛选条件可以是比较运算、逻辑运算或者范围判断等,只有满足条件的数据行才会被返回到结果集中。
WHERE子句常用运算符
WHERE子句中支持多种运算符,常见的可以分为以下几类:
比较运算符
=:等于,判断两个值是否相等!=或<>:不等于>:大于<:小于>=:大于等于<=:小于等于
逻辑运算符
AND:同时满足多个条件OR:满足任意一个条件即可NOT:对条件取反
其他常用运算符
IN:判断值是否在指定集合中BETWEEN...AND...:判断值是否在某个范围内LIKE:模糊匹配,配合%和_使用IS NULL/IS NOT NULL:判断值是否为空
WHERE子句实际使用示例
假设我们有一个名为user_info的用户表,表结构如下:
-- 创建用户表示例
CREATE TABLE user_info (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
age INT,
city VARCHAR(50),
register_time DATE
);
单条件筛选
查询年龄大于25岁的用户:
SELECT id, username, age, city FROM user_info WHERE age > 25;
多条件组合筛选
查询年龄大于等于20岁且小于等于30岁,同时所在城市是北京的用户:
SELECT id, username, age, city FROM user_info WHERE age >= 20 AND age <= 30 AND city = '北京';
上面的范围判断也可以用BETWEEN...AND...简化:
SELECT id, username, age, city FROM user_info WHERE age BETWEEN 20 AND 30 AND city = '北京';
模糊匹配筛选
查询用户名中包含“测试”关键词的用户:
SELECT id, username, age, city FROM user_info WHERE username LIKE '%测试%';
空值判断筛选
查询城市信息为空的用户:
SELECT id, username, age, city FROM user_info WHERE city IS NULL;
WHERE子句在数据过滤中的作用
WHERE子句的核心作用是在数据库层面完成数据过滤,避免将大量无用数据返回到应用层,主要有以下几个优势:
- 提升查询效率:提前过滤数据可以减少后续处理的数据量,降低数据库和应用服务器的资源消耗。
- 精准获取目标数据:通过灵活的条件组合,可以快速定位到符合业务需求的数据,不需要在应用层再做二次筛选。
- 支持复杂业务场景:结合多种运算符和函数,可以满足各类复杂的筛选需求,比如时间范围查询、多维度条件组合等。
需要注意的是,WHERE子句是在数据分组之前进行过滤的,如果需要对分组后的结果进行筛选,需要使用HAVING子句,二者不能混淆使用。
常见注意事项
- WHERE子句中不能直接使用聚合函数,比如
WHERE COUNT(id) > 10是不合法的,这类需求需要用HAVING子句实现。 - 字符串类型的条件值需要用单引号包裹,数值类型不需要。
- 使用
LIKE进行模糊匹配时,如果不需要通配符,尽量用=代替,因为LIKE的性能通常低于等于判断。