一、WHERE 是什么语法SELECT 字段 FROM 表名 WHERE 条件;例如SELECT * FROM student WHERE age 20;可以理解为student所有数据 ↓ WHERE 进行筛选 ↓ 只留下符合条件的数据 ↓ SELECT 返回所以WHERE 的作用就是过滤数据。二、准备测试数据以后这一章我们都使用下面这张表。CREATE TABLE student( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(30), age INT, gender CHAR(1), score DECIMAL(5,2) );插入数据INSERT INTO student(name,age,gender,score) VALUES (Tom,20,M,88.5), (Jack,22,M,91), (Lucy,19,F,95.5), (Rose,21,F,86), (Mike,20,M,78.5);数据如下idnameagegenderscore1Tom20M88.52Jack22M913Lucy19F95.54Rose21F865Mike20M78.5三、比较运算符这是 WHERE 最基础的内容。1、等于查询Tom。SELECT * FROM student WHERE name Tom;结果idname1Tom再例如查询20 岁。SELECT * FROM student WHERE age 20;结果nameageTom20Mike20注意字符串必须使用单引号 。正确WHERE nameTom错误WHERE nameTom2、大于查询年龄大于20。SELECT * FROM student WHERE age 20;结果nameageJack22Rose213、小于查询年龄小于20。SELECT * FROM student WHERE age 20;结果Lucy。4、大于等于SELECT * FROM student WHERE score 90;结果namescoreJack91Lucy95.55、小于等于SELECT * FROM student WHERE score 80;结果Mike。6、不等于MySQL 支持两种写法。第一种!例如SELECT * FROM student WHERE gender ! M;第二种SELECT * FROM student WHERE gender M;结果一样nameLucyRose企业建议是 SQL 标准写法!是 MySQL 也支持的写法两者都很常见。四、逻辑运算符实际开发中一个条件往往不够。例如查询20 岁以上的男生。AND并且SELECT * FROM student WHERE age 20 AND genderM;结果nameJack必须条件1 并且 条件2都成立。OR或者查询女生或者成绩大于90。SELECT * FROM student WHERE genderF OR score90;结果nameJackLucyRoseNOT取反查询不是女生。SELECT * FROM student WHERE NOT genderF;结果nameTomJackMike也可以写WHERE gender F五、BETWEEN例如查询年龄19~21。SELECT * FROM student WHERE age BETWEEN 19 AND 21;结果nameageTom20Lucy19Rose21Mike20注意BETWEEN 包含两端。即19 ≤ age ≤ 21等价于WHERE age19 AND age21六、IN查询TomMikeLucy很多人写WHERE nameTom OR nameMike OR nameLucy其实推荐SELECT * FROM student WHERE name IN (Tom,Mike,Lucy);结果nameTomLucyMikeIN 本质上就是多个等值判断的简洁写法。七、LIKE重点这是企业开发中最常用的模糊查询。例如搜索用户名。%表示任意多个字符包括 0 个字符。查询T 开头。SELECT * FROM student WHERE name LIKE T%;结果Tom。查询e 结尾。SELECT * FROM student WHERE name LIKE %e;结果RoseMike查询包含 o。SELECT * FROM student WHERE name LIKE %o%;结果TomRose_表示任意一个字符。例如SELECT * FROM student WHERE name LIKE _o%;解释第一位任意字符 第二位o 后面任意多个字符符合Tom不符合Mike八、NULL 判断这是 SQL 新手最容易犯错的地方。错误写法WHERE name NULL;永远查不到结果。正确写法WHERE name IS NULL;查询不是 NULL。WHERE name IS NOT NULL;原因NULL表示未知值不是普通的数据因此不能使用比较必须使用IS NULL或IS NOT NULL。九、逻辑运算符优先级例如WHERE age20 OR genderF AND score90很多人认为从左到右执行。实际上SQL 优先级NOT ↓ AND ↓ OR所以实际上相当于WHERE age20 OR ( genderF AND score90 )企业开发建议复杂条件一定加括号。例如WHERE (age20 OR genderF) AND score90可读性更好也避免歧义。十、企业开发规范推荐SELECT id, name, score FROM student WHERE age 20 AND gender M;不推荐select * from student where age20 and genderM;推荐原因SQL 关键字统一大写不使用SELECT *条件清晰复杂表达式使用括号字段按需查询本节知识总结类型常用语法等于不等于!、大于小于大于等于小于等于范围BETWEEN ... AND ...多值匹配IN (...)模糊查询LIKE空值判断IS NULL、IS NOT NULL并且AND或者OR取反NOT本节思考题企业面试高频请尝试回答下面五个问题BETWEEN 18 AND 20和age 18 AND age 20有什么关系有没有区别BETWEEN 18 AND 20本质等价于age 18 AND age 20都是范围查询区别主要在语法表达形式BETWEEN 更简洁但底层逻辑一致。为什么IN比多个OR更推荐IN本质是集合查询比多个OR更简洁、可读性更强同时数据库优化器通常能更高效处理集合匹配因此企业开发中更推荐使用IN。%和_的区别是什么请分别举一个例子。%表示任意长度字符_表示单个字符占位。%用于模糊匹配整体结构_用于精确控制字符位置。为什么 SQL 判断NULL必须使用IS NULL而不能使用 NULL因为 NULL 表示未知值不是具体数据无法使用比较。SQL 使用IS NULL专门判断空值本质上是三值逻辑TRUE / FALSE / UNKNOWN导致的设计。为什么企业开发中建议复杂的AND、OR条件一定要加括号即使 SQL 可以正常执行因为 SQL 存在 AND/OR 优先级问题AND 优先级高于 OR不加括号容易导致逻辑歧义。企业开发中通过加括号明确逻辑边界提高可读性并避免业务错误。