当前位置:首页 > Python > 正文

MySQL WHERE条件中AND和OR运算符使用教程 - 数据库查询指南

MySQL查询中AND与OR运算符使用教程

在MySQL查询中,WHERE子句用于筛选记录,而ANDOR运算符则用于组合多个筛选条件。本教程将详细讲解如何正确使用这两个运算符。

AND运算符

AND运算符要求所有条件同时为真,才会返回记录。

语法结构

SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;

示例

从employees表中查询年龄大于30且部门为'Sales'的员工:

SELECT first_name, last_name, age, department
FROM employees
WHERE age > 30 AND department = 'Sales';

OR运算符

OR运算符要求至少一个条件为真,就会返回记录。

语法结构

SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;

示例

从employees表中查询部门为'Marketing'或'HR'的员工:

SELECT first_name, last_name, department
FROM employees
WHERE department = 'Marketing' OR department = 'HR';

组合使用AND和OR

当需要同时使用AND和OR时,必须使用括号明确条件组合顺序,否则可能得到错误结果。

示例1:正确使用括号

查询部门为'Sales'且年龄大于35,或部门为'Engineering'的所有员工:

SELECT first_name, last_name, age, department
FROM employees
WHERE (department = 'Sales' AND age > 35) OR department = 'Engineering';

示例2:错误用法(缺少括号)

以下查询会产生歧义,可能返回错误结果:

SELECT first_name, last_name, age, department
FROM employees
WHERE department = 'Sales' AND age > 35 OR department = 'Engineering';

注意:MySQL会按照运算符优先级处理,AND优先级高于OR,可能导致结果不符合预期。

运算符优先级规则

  1. 括号 () 具有最高优先级
  2. AND 运算符优先级高于 OR
  3. 相同优先级的运算符从左到右依次计算

实际应用场景

场景1:用户筛选

查找18-30岁之间或月消费超过5000的用户:

SELECT * FROM users 
WHERE (age BETWEEN 18 AND 30) 
   OR monthly_spend > 5000;

场景2:产品库存

查询价格低于100且库存大于50,或特价标志为true的产品:

SELECT product_name, price, stock 
FROM products 
WHERE (price < 100 AND stock > 50) 
   OR on_sale = true;

最佳实践总结

  • 始终使用括号:当混合使用AND和OR时,使用括号明确条件组合
  • 注意NULL值:条件中涉及NULL时使用IS NULL或IS NOT NULL
  • 优化性能:将选择性高的条件放在前面,减少结果集大小
  • 保持简洁:复杂条件可考虑拆分为多个查询或使用临时表
  • 测试验证:在生产环境使用前,用样本数据测试查询结果

进一步学习资源

想要深入了解MySQL查询优化,可参考:

  • MySQL官方文档 - 逻辑运算符章节
  • 《高性能MySQL》查询优化部分
  • SQL模式匹配和正则表达式应用

发表评论