在使用MySQL查询数据时,我们常常需要从大量数据中筛选出符合特定条件的记录。这时候,WHERE子句就派上用场了——它能帮我们精准地过滤出想要的数据,就像从一堆苹果里挑出红色的、带斑点的一样。本文将用最简单的语言和例子,带你快速掌握WHERE子句的用法。
一、WHERE子句是什么?¶
WHERE子句是SELECT语句的一部分,紧跟在FROM表名之后,用来指定查询数据的条件。只有满足条件的记录才会被返回,不满足条件的会被“过滤”掉。
举个例子:假设我们有一个students表,里面存着学生的姓名、年龄、分数。如果想查询“年龄等于18岁”的学生,就可以用WHERE子句:
SELECT * FROM students
WHERE age = 18;
这里的age = 18就是筛选条件,*表示查询所有列,FROM students指定从students表中查询。
二、最基础的条件:等于(=)和不等于(!= 或 <>)¶
最常用的条件是“等于”和“不等于”,适用于数值、字符串、日期等类型。
- 等于(=)
用于匹配完全相等的值。
- 数值类型:age = 18(不需要引号)
- 字符串类型:name = '张三'(必须用单引号' '包裹字符串)
例子:查询姓名为“李四”的学生:
SELECT * FROM students
WHERE name = '李四';
- 不等于(!= 或 <>)
用于匹配不相等的值。
例子:查询分数不等于60分的学生:
SELECT * FROM students
WHERE score != 60; -- 或用<>代替!=
三、范围条件:大于、小于和BETWEEN¶
当需要筛选“在某个范围内”的数据时,常用大于(>)、小于(<)、大于等于(>=)、小于等于(<=),或者更简洁的BETWEEN...AND...。
- 大于/小于
- 年龄大于18岁:age > 18
- 分数小于60分:score < 60
例子:查询年龄大于18岁且分数大于80分的学生:
SELECT * FROM students
WHERE age > 18 AND score > 80;
- BETWEEN…AND…(范围查询)
用于匹配“在A和B之间(包含A和B)”的数据,比>=和<=更简洁。
例子:查询年龄在18到22岁之间的学生(包含18和22):
SELECT * FROM students
WHERE age BETWEEN 18 AND 22;
(注意:BETWEEN的两端值必须是“小值在前,大值在后”,否则会返回空结果)
四、逻辑运算符:AND、OR、NOT¶
当需要组合多个条件时,用AND(且)、OR(或)、NOT(非) 连接,让筛选更灵活。
- AND(且)
所有条件必须同时满足。
例子:查询年龄大于18岁且性别为“男”的学生:
SELECT * FROM students
WHERE age > 18 AND gender = '男';
- OR(或)
满足任一条件即可。
例子:查询年龄小于15岁或分数大于90分的学生:
SELECT * FROM students
WHERE age < 15 OR score > 90;
- NOT(非)
取反,即“不满足某个条件”。
例子:查询班级不是“高三”的学生:
SELECT * FROM students
WHERE class NOT = '高三';
五、模糊查询:LIKE(匹配部分字符)¶
如果想查询“姓名包含某个字”或“以某个字开头/结尾”的记录,可以用LIKE搭配通配符%(任意多个字符)或_(单个字符)。
%:代表任意长度的字符(包括0个字符),比如'李%'匹配所有以“李”开头的名字。_:代表单个字符,比如'张_'匹配“张”+1个任意字符(如“张三”“张四”)。
例子:
1. 查询姓名包含“张”的学生:
SELECT * FROM students
WHERE name LIKE '%张%';
- 查询姓名以“王”开头且长度为2的学生(比如“王五”):
SELECT * FROM students
WHERE name LIKE '王_';
六、特殊条件:处理空值(IS NULL / IS NOT NULL)¶
在数据库中,可能存在“没有值”的情况(空值,用NULL表示,注意不是字符串'NULL')。此时需要用IS NULL或IS NOT NULL判断空值,不能用=或!=。
例子:查询班级为空的学生:
SELECT * FROM students
WHERE class IS NULL;
七、常见错误与注意事项¶
- 字符串必须用单引号:比如
name = '张三'(正确),如果写成name = 张三会报错。 - BETWEEN包含两端值:
BETWEEN 18 AND 22包含18和22,若用18 < age < 22则不包含。 - 逻辑运算符优先级:
AND优先级高于OR,不确定时用括号明确顺序,比如(age > 18 AND score > 80) OR (age < 15 AND score > 90)。 - 避免用NULL判断错误:
class = NULL不会返回结果,必须用class IS NULL。
总结¶
WHERE子句是MySQL数据筛选的核心工具,掌握它能帮你快速从表中提取目标数据。关键是理解条件类型(等于、范围、模糊、逻辑)和特殊处理(空值、字符串引号)。多练习简单例子(如学生表、订单表),很快就能熟练运用!
现在,你可以尝试在自己的MySQL环境中创建一个简单表,用WHERE子句筛选不同条件的数据,加深理解吧!