在日常开发中,查数据是家常便饭。比如你是个电商后台的运营,想看看上个月在北京下单、订单金额超过500元、且使用了优惠券的用户有哪些,这时候就得用到 SQL 查询多个条件。
用 WHERE 搭配 AND 和 OR
最基本的多条件查询靠的是 WHERE 子句配合逻辑操作符。AND 表示“同时满足”,OR 表示“满足其一”。比如要查年龄大于25且所在城市是上海的员工:
SELECT * FROM employees
WHERE age > 25 AND city = '上海';
如果还想包含杭州的员工,可以加上 OR:
SELECT * FROM employees
WHERE age > 25 AND (city = '上海' OR city = '杭州');
注意括号的使用,它能明确优先级,避免逻辑出错。
IN 和 BETWEEN 让条件更简洁
当你需要匹配多个固定值时,别一个一个写 OR。比如查北京、上海、广州、深圳四个城市的用户:
SELECT * FROM users
WHERE city IN ('北京', '上海', '广州', '深圳');
同样,范围查询用 BETWEEN 更直观。比如查2024年6月的所有订单:
SELECT * FROM orders
WHERE order_date BETWEEN '2024-06-01' AND '2024-06-30';
结合 LIKE 做模糊匹配
有时候条件不是精确的。比如想找邮箱以 "admin" 开头的用户,并且注册时间在一年前:
SELECT * FROM users
WHERE email LIKE 'admin%'
AND register_time < DATE_SUB(NOW(), INTERVAL 1 YEAR);
NULL 值要特殊处理
判断某个字段是否为空,不能用等号,得用 IS NULL 或 IS NOT NULL。比如查还没有填写电话号码的客户:
SELECT * FROM customers
WHERE phone IS NULL;
实际场景:筛选符合条件的订单
回到最开始的电商例子,假设表叫 orders,字段有 user_id、amount、city、used_coupon、order_time。你想查去年北京地区、金额大于500、用了优惠券的订单:
SELECT user_id, amount, order_time
FROM orders
WHERE city = '北京'
AND amount > 500
AND used_coupon = 1
AND order_time BETWEEN '2023-01-01' AND '2023-12-31';
这样的查询能快速定位高价值用户,方便后续做精准营销。
注意索引对多条件的影响
写得多不代表跑得快。如果经常按 city 和 amount 查数据,建议在这两个字段上建联合索引。否则数据量一大,查询可能慢得让人抓狂。
SQL 多条件查询就像组合钥匙,每个条件都是一道锁,全对才能开门。掌握好 AND、OR、IN、BETWEEN 这些工具,再留意 NULL 和索引问题,查数据就能又准又快。