MySQL条件查询是指通过给查询语句附加过滤规则,从数据表中提取出满足特定要求的记录。它通常依托SELECT语句中的WHERE子句来完成,借助各类操作符对字段值进行判断,从而决定某行数据是否出现在最终结果集里。

一、WHERE子句的基础结构
条件查询最核心的写法是在SELECT之后加上WHERE关键字,再跟上逻辑表达式。数据库引擎会逐行评估这个表达式,只有返回真值的行才会被保留。这种机制让我们能够从庞大的表中剥离出真正关心的数据。
下面是一段最基础的用法示例,从用户表中找出年龄大于等于十八岁的记录:
SELECT id, name, age FROM user WHERE age >= 18;
在这个例子中,age >= 18就是一个条件表达式。如果某行用户的age字段是15,表达式结果为假,这一行就被丢弃。掌握这种基础过滤方式,是后续学习复杂查询的前提。
二、常用比较与逻辑操作符
MySQL提供了一组丰富的比较操作符,例如等于(=)、不等于(!=或<>)、大于(>)、小于(<)、以及BETWEEN和IN。它们可以单独使用,也能组合出更精细的筛选逻辑。
当我们需要多条件组合时,就要用到AND、OR以及NOT这些逻辑操作符。AND要求两边条件同时成立,OR只需其一成立,NOT则对条件取反。看下面这段SQL,它查找状态为活跃且来自北京或者上海的用户:
SELECT id, name, city, status FROM user WHERE status = 'active' AND (city = '北京' OR city = '上海');
注意上面用括号明确了OR的优先级,否则AND会先结合,导致语义错误。合理使用括号不仅能避免bug,也提升了语句可读性。另外,IN操作符适合字段匹配多个离散值,比连写多个OR更简洁。
三、模糊查询与空值处理
LIKE操作符支持使用百分号(%)和下划线(_)进行模式匹配。%代表任意长度字符,_代表单个字符。例如查找所有姓张的用户:
SELECT name FROM user WHERE name LIKE '张%';
对于空值,SQL里不能用等于号判断,必须使用IS NULL或IS NOT NULL。很多初学者写WHERE col = NULL,结果永远拿不到数据,这是因为NULL代表未知,任何与NULL的直接比较都返回未知而非真。
在实际业务中,用户填选框未填、接口漏传字段都可能产生NULL。用IS NULL能准确识别这些缺失信息,再配合COALESCE函数给默认值,可以让后续统计更稳妥。
四、条件查询的性能注意点
如果WHERE条件落在未加索引的字段上,MySQL往往要全表扫描,数据量大时响应会明显变慢。为频繁过滤的字段建立索引,可以大幅减少扫描行数。
另外,在字段上使用函数也会导致索引失效,比如WHERE YEAR(create_time) = 2023就不如用范围比较。改写如下更能利用索引:
SELECT id FROM orders WHERE create_time >= '2023-01-01' AND create_time < '2024-01-01';
通过规避函数包裹、选择区分度高的列建索引,条件查询既能保持语义清晰,也能维持良好性能。理解执行计划并结合慢查询日志,是调优条件查询的有效路径。