在使用MySQL查询数据时,我们常常需要从大量数据中筛选出符合特定条件的记录。这时候,WHERE子句就派上用场了——它能帮我们精准地过滤出想要的数据,就像从一堆苹果里挑出红色的、带斑点的一样。本文将用最简单的语言和例子,带你快速掌握WHERE子句的用法。

一、WHERE子句是什么?

WHERE子句是SELECT语句的一部分,紧跟在FROM表名之后,用来指定查询数据的条件。只有满足条件的记录才会被返回,不满足条件的会被“过滤”掉。

举个例子:假设我们有一个students表,里面存着学生的姓名、年龄、分数。如果想查询“年龄等于18岁”的学生,就可以用WHERE子句:

SELECT * FROM students 
WHERE age = 18;

这里的age = 18就是筛选条件,*表示查询所有列,FROM students指定从students表中查询。

二、最基础的条件:等于(=)和不等于(!= 或 <>)

最常用的条件是“等于”和“不等于”,适用于数值、字符串、日期等类型。

  1. 等于(=)
    用于匹配完全相等的值。
    - 数值类型:age = 18(不需要引号)
    - 字符串类型:name = '张三'(必须用单引号' '包裹字符串)

例子:查询姓名为“李四”的学生:

   SELECT * FROM students 
   WHERE name = '李四';
  1. 不等于(!= 或 <>)
    用于匹配不相等的值。
    例子:查询分数不等于60分的学生:
   SELECT * FROM students 
   WHERE score != 60;  -- 或用<>代替!=

三、范围条件:大于、小于和BETWEEN

当需要筛选“在某个范围内”的数据时,常用大于(>)、小于(<)、大于等于(>=)、小于等于(<=),或者更简洁的BETWEEN...AND...

  1. 大于/小于
    - 年龄大于18岁:age > 18
    - 分数小于60分:score < 60

例子:查询年龄大于18岁且分数大于80分的学生:

   SELECT * FROM students 
   WHERE age > 18 AND score > 80;
  1. 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(非) 连接,让筛选更灵活。

  1. AND(且)
    所有条件必须同时满足。
    例子:查询年龄大于18岁性别为“男”的学生:
   SELECT * FROM students 
   WHERE age > 18 AND gender = '男';
  1. OR(或)
    满足任一条件即可。
    例子:查询年龄小于15岁分数大于90分的学生:
   SELECT * FROM students 
   WHERE age < 15 OR score > 90;
  1. NOT(非)
    取反,即“不满足某个条件”。
    例子:查询班级不是“高三”的学生:
   SELECT * FROM students 
   WHERE class NOT = '高三';

五、模糊查询:LIKE(匹配部分字符)

如果想查询“姓名包含某个字”或“以某个字开头/结尾”的记录,可以用LIKE搭配通配符%(任意多个字符)或_(单个字符)。

  • %:代表任意长度的字符(包括0个字符),比如'李%'匹配所有以“李”开头的名字。
  • _:代表单个字符,比如'张_'匹配“张”+1个任意字符(如“张三”“张四”)。

例子:
1. 查询姓名包含“张”的学生:

   SELECT * FROM students 
   WHERE name LIKE '%张%';
  1. 查询姓名以“王”开头且长度为2的学生(比如“王五”):
   SELECT * FROM students 
   WHERE name LIKE '王_';

六、特殊条件:处理空值(IS NULL / IS NOT NULL)

在数据库中,可能存在“没有值”的情况(空值,用NULL表示,注意不是字符串'NULL')。此时需要用IS NULLIS NOT NULL判断空值,不能用=!=

例子:查询班级为空的学生:

SELECT * FROM students 
WHERE class IS NULL;

七、常见错误与注意事项

  1. 字符串必须用单引号:比如name = '张三'(正确),如果写成name = 张三会报错。
  2. BETWEEN包含两端值BETWEEN 18 AND 22包含18和22,若用18 < age < 22则不包含。
  3. 逻辑运算符优先级AND优先级高于OR,不确定时用括号明确顺序,比如(age > 18 AND score > 80) OR (age < 15 AND score > 90)
  4. 避免用NULL判断错误class = NULL不会返回结果,必须用class IS NULL

总结

WHERE子句是MySQL数据筛选的核心工具,掌握它能帮你快速从表中提取目标数据。关键是理解条件类型(等于、范围、模糊、逻辑)和特殊处理(空值、字符串引号)。多练习简单例子(如学生表、订单表),很快就能熟练运用!

现在,你可以尝试在自己的MySQL环境中创建一个简单表,用WHERE子句筛选不同条件的数据,加深理解吧!

小夜