如何在mysql中使用where条件_mysql where条件用法解析

WHERE是MySQL中用于筛选记录的关键子句,必须跟在FROM或JOIN后,支持单/多条件组合,需注意字符串用单引号、NULL用IS NULL判断、逻辑优先级及括号分组,并应遵循索引使用规范以提升性能。

在 MySQL 中,WHERE 子句用于筛选满足特定条件的记录,是 SELECTUPDATEDELETE 等语句中最常用、最关键的过滤工具。用好 WHERE,核心在于准确表达逻辑关系和正确处理数据类型。

基础语法与常见写法

WHERE 必须紧跟在 FROM(或 JOIN)之后,支持单个条件或多条件组合。基本结构如下:

SELECT * FROM users WHERE age > 18;

UPDATE orders SET status = 'shipped' WHERE order_id = 1001;

注意:字符串值要用单引号('admin'),数字可不加引号(但推荐统一用引号避免隐式转换问题),NULL 要用 IS NULL 判断,不能用 = NULL

多条件组合与逻辑运算符

使用 ANDORNOT 连接多个条件,优先级为 NOT > AND > OR,复杂逻辑建议用括号明确分组:

  • SELECT * FROM products WHERE category = 'book' AND price BETWEEN 20 AND 80;
  • SELECT * FROM users WHERE city = 'Beijing' OR city = 'Shanghai';(等价于 city IN ('Beijing','Shanghai')
  • SELECT * FROM logs WHERE level != 'DEBUG' AND created_at >= '2025-01-01';

常用条件表达式与易错点

除了常规比较(=>),这些操作符高频实用且容易出错:

  • IN / NOT IN:适用于枚举多个固定值,注意 IN 中含 NULL 会导致整条条件结果为 UNKNOWN,查不到数据
  • LIKE:模糊匹配,% 匹配任意长度字符,_ 匹配单个字符;中文或带特殊字符时注意转义(如 \_)和索引失效风险
  • IS NULL / IS NOT NULL:判断空值唯一安全方式,= NULL 永远返回 false
  • BETWEEN ... AND ...:闭区间,包含两端值,且要求前后值顺序正确(BETWEEN 10 AND 5 不生效)

性能与索引注意事项

WHERE 条件是否能走索引,直接影响查询速度:

  • 尽量在 WHERE 中使用索引列做等值或范围查询(如 WHERE status = 'active'
  • 避免在索引列上使用函数或表达式(如 WHERE YEAR(create_time) = 2025 会跳过索引)
  • 对文本字段用 LIKE 时,前导通配符(LIKE '%abc')无法使用 B+Tree 索引,可考虑全文索引或倒序存储优化
  • EXPLAIN 查看执行计划,确认 type 是否为 refrangekey 是否显示用了哪个索引