在mysql的SQL语句体系中,where是一个用于设置条件过滤的关键字,主要作用是筛选符合指定规则的数据行,让查询或数据操作只针对满足要求的内容执行,不会处理不符合条件的数据。

where的基本作用
当我们需要从数据库表中获取特定数据时,如果直接执行不带条件的select语句,会返回表中的所有行,这在实际场景中往往不符合需求。where就是用来解决这个问题,它可以在查询语句中指定一个或多个判断条件,数据库引擎会先检查每一行数据是否符合这些条件,只把符合的行返回给用户。
除了查询场景,where还可以和update、delete语句搭配,限定更新或删除的数据范围,避免出现误更新全表、误删除全表的问题。
where的常见使用场景
1. 搭配select语句查询数据
这是where最常用的场景,比如我们有一个存储用户信息的user表,结构如下:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 用户ID |
| name | varchar(50) | 用户姓名 |
| age | int | 用户年龄 |
| city | varchar(50) | 用户所在城市 |
如果我们要查询所有年龄大于18岁的用户,就可以使用带where的select语句:
-- 查询年龄大于18岁的用户 SELECT id, name, age, city FROM user WHERE age > 18;
如果要查询所在城市是北京且年龄小于30岁的用户,可以使用多个条件组合:
-- 查询城市为北京且年龄小于30岁的用户 SELECT id, name, age, city FROM user WHERE city = '北京' AND age < 30;
2. 搭配update语句更新数据
更新数据时如果不加where条件,会把表中所有行的对应字段都修改,这通常是不符合预期的。比如我们要把北京地区的用户年龄都增加1岁,就需要用where限定范围:
-- 给北京地区的用户年龄加1 UPDATE user SET age = age + 1 WHERE city = '北京';
3. 搭配delete语句删除数据
删除数据时where的作用更加重要,不加where的delete语句会清空整张表的数据。比如我们要删除年龄小于16岁的用户数据:
-- 删除年龄小于16岁的用户 DELETE FROM user WHERE age < 16;
where支持的条件运算符
where后面的条件可以使用多种运算符来构建,常见的包括:
- 比较运算符:
>、<、=、>=、<=、!=(或<>) - 逻辑运算符:
AND(与)、OR(或)、NOT(非) - 范围运算符:
BETWEEN...AND...(在指定区间内)、IN (...)(在指定集合中) - 模糊匹配:
LIKE(搭配%或_使用) - 空值判断:
IS NULL、IS NOT NULL
比如查询年龄在20到30之间,或者所在城市是上海的用户:
-- 查询年龄在20-30之间,或者城市为上海的用户 SELECT id, name, age, city FROM user WHERE (age BETWEEN 20 AND 30) OR city = '上海';
使用where的注意事项
首先要注意条件中字符串类型的值需要用单引号包裹,数字类型不需要。其次如果条件中涉及多个逻辑判断,建议用括号明确优先级,避免因为运算符优先级问题导致筛选结果不符合预期。另外在对大表执行带where的update或delete语句前,最好先执行对应的select语句验证条件是否正确,确认无误后再执行修改或删除操作。