SQL复杂查询核心是合理组合AND/OR/NOT并用括号明确优先级,重点掌握多字段范围筛选、时间重叠判断(A1

SQL复杂条件查询的核心是把多个逻辑关系用 WHERE 中的 AND / OR / NOT 合理组合,再配合括号明确优先级。别硬背语法,先看几个真实高频场景,照着改就能用。
多字段范围+状态筛选(最常用)
比如查“2024年下单、已支付、订单金额在100~500之间、且不是测试用户的订单”:
- 时间用 BETWEEN 或 >= AND
- 状态字段建议用明确值(如 status = 'paid'),别用 status != 'cancelled' 这类排除写法,容易漏新状态
- 用户过滤加 NOT IN 或 LEFT JOIN + IS NULL,注意 NULL 值会让 NOT IN 整体失效
示例:
SELECT * FROM ordersWHERE create_time >= '2024-01-01'
AND create_time 2025-01-01'
AND status = 'paid'
AND amount BETWEEN 100 AND 500
AND user_id NOT IN (SELECT id FROM users WHERE is_test = 1);
模糊匹配+空值兼容处理
搜用户姓名含“张”、手机号不为空、且地区是北京或上海:
- LIKE '%张%' 效率低,线上表数据量大时尽量加前置条件(如按省份分区后再模糊)
- 判断非空别只写 phone != '',要同时写 phone IS NOT NULL,因空字符串和 NULL 在 SQL 中不等价
- 多值枚举用 IN 比一堆 OR 清晰,也方便后期维护
示例:
SELECT * FROM usersWHERE name LIKE '%张%'
AND phone IS NOT NULL
AND phone != ''
AND city IN ('北京', '上海');
关联数据动态过滤(子查询 or JOIN)
查“有至少2笔已完成订单的 VIP 用户”:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~