在mysql的查询操作中,where条件用于从数据表中筛选出符合指定规则的记录,是日常数据查询最常用的功能之一。通过where条件可以过滤掉不需要的数据,只返回目标结果。
where条件基础语法
where条件通常跟在SELECT语句的FROM子句之后,基本语法格式如下:
-- 基础查询语法,column_list是要查询的字段,table_name是数据表名,condition是筛选条件 SELECT column_list FROM table_name WHERE condition;
如果省略where条件,查询会返回表中的所有记录,加上where条件后只会返回满足条件的数据。
常见where条件筛选场景
1. 数值类条件筛选
当需要筛选数值类型的字段时,可以直接使用比较运算符,常见的比较运算符包括=、>、<、>=、<=、!=。
假设存在用户表user_info,包含id、name、age字段,要查询年龄大于18岁的用户,代码如下:
-- 查询年龄大于18的用户 SELECT id, name, age FROM user_info WHERE age > 18;
2. 字符串类条件筛选
筛选字符串类型字段时,条件值需要用单引号包裹,同样支持比较运算符,也可以使用LIKE实现模糊匹配。
查询名字为张三的用户:
-- 精确匹配字符串 SELECT id, name, age FROM user_info WHERE name = '张三';
查询名字中包含三的用户:
-- 模糊匹配,%代表任意长度的任意字符 SELECT id, name, age FROM user_info WHERE name LIKE '%三%';
3. 范围类条件筛选
如果需要筛选某个范围内的数据,可以使用BETWEEN...AND...或者IN关键字。
查询年龄在18到30岁之间的用户:
-- BETWEEN后面是范围最小值,AND后面是范围最大值,包含边界值 SELECT id, name, age FROM user_info WHERE age BETWEEN 18 AND 30;
查询id为1、3、5的用户:
-- IN后面跟括号,括号内是要匹配的值列表 SELECT id, name, age FROM user_info WHERE id IN (1, 3, 5);
4. 多条件组合筛选
当需要同时满足多个条件时,可以使用AND连接条件;满足任意一个条件即可时,使用OR连接条件,也可以通过括号调整判断优先级。
查询年龄大于18且名字包含张的用户:
SELECT id, name, age FROM user_info WHERE age > 18 AND name LIKE '张%';
查询年龄小于18或者年龄大于60的用户:
SELECT id, name, age FROM user_info WHERE age < 18 OR age > 60;
空值筛选
如果要筛选字段值为空的记录,不能使用= NULL,需要使用IS NULL;筛选非空记录使用IS NOT NULL。
查询没有填写年龄的用户:
SELECT id, name, age FROM user_info WHERE age IS NULL;
注意事项
- 字符串条件值必须用单引号包裹,数值条件值不需要引号
- 模糊匹配中
%代表任意长度任意字符,_代表单个任意字符 - 多条件组合时如果逻辑复杂,建议用括号明确优先级,避免判断错误
- where条件中不能直接使用聚合函数,聚合函数的筛选需要放在
HAVING子句中