SQL条件查询使用说明_SQL WHERE条件多场景示例

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 >= '2025-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或大小写等细节。