SQL WHERE子句核心在于逻辑准确与业务匹配:基础用等值、范围(BETWEEN/日期)、模糊(LIKE/%/_)、空值(IS NULL);多条件用AND/OR/NOT加括号;IN适合小枚举,EXISTS更高效。

SQL的WHERE子句是筛选数据的核心工具,用对了能精准定位目标记录,用错了可能查不到数据或误删误改。关键不在语法多复杂,而在理解条件逻辑和实际业务场景的匹配。
基础等值与范围查询
最常用的是单字段精确匹配和数值/日期范围筛选。注意字符串要加单引号,数字和日期(标准格式)不用。
- SELECT * FROM users WHERE status = 'active';
- SELECT * FROM orders WHERE amount BETWEEN 100 AND 500;
- SELECT * FROM logs WHERE created_at >= '2024-01-01';
模糊匹配与空值判断
LIKE适合做关键词搜索,%代表任意长度字符,_代表单个字符;IS NULL/IS NOT NULL专门判断空值,不能用= NULL。
- SELECT name FROM products WHERE name LIKE '%phone%';
- SELECT * FROM customers WHERE phone IS NULL;
- SELECT * FROM users WHERE email LIKE 'admin_@%.com';
多条件组合与优先级控制
AND、OR、NOT组合条件时,AND优先级高于OR;不确定时就用括号明确逻辑分组,避免歧义。
- SELECT * FROM orders WHERE status = 'shipped' AND total > 200;
- SELECT * FROM users WHERE (role = 'admin' OR role = 'editor') AND is_active = 1;
- SELECT * FROM logs WHERE level != 'debug' AND created_at > NOW() - INTERVAL 7 DAY;
IN、EXISTS与子查询应用
IN适合枚举少量固定值;IN后面跟子查询要注意性能;EXISTS更关注“是否存在”,通常比IN更高效,尤其在大表关联时。
- SELECT * FROM products WHERE category_id IN (1, 3, 5);
- SELECT * FROM users WHERE id IN (SELECT user_id FROM orders WHERE status = 'paid');
- SELECT * FROM users u WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id AND o.status = 'cancelled');
基本上就这些。写WHERE条件时,先想清楚“我要什么数据”,再选合适的操作符和结构,别堆砌条件,也别漏掉NULL或大小写等细节。










