SQL 字段筛选用 WHERE 子句,通过逻辑运算符组合条件:单条件如 age>18;多条件 AND 需全满足,OR 满足其一;IN 可简化多个 OR;NOT 需慎用NULL,判断 NULL 必须用 IS NULL/IS NOT NULL。

sql字段筛选靠 WHERE 子句实现,核心是用逻辑 运算符 把多个条件组合起来,让 数据库 只返回符合全部(或部分)要求的数据行。
单条件筛选:最基础的写法
直接在 WHERE 后写一个表达式,比如:
SELECT * FROM users WHERE age > 18;
这表示只查年龄大于 18 的用户。注意字段名、操作符(>、=、!=、LIKE 等)和值之间要有空格,字符串 值记得加单引号。
多条件 AND 连接:必须同时满足
用 AND 把多个条件串起来,所有条件都为真时整行才被选中:
- select * FROM orders WHERE status = ‘paid’ AND amount >= 100; —— 查已支付且金额不小于 100 的订单
- 条件顺序不影响结果,但建议把过滤性更强的条件放前面(如索引字段),有助于提升查询效率
- 可以嵌套括号明确优先级,比如 WHERE (type = ‘vip’) AND (score> 90 OR level = ‘S’)
多条件 OR 连接:满足任一即可
OR 表示“或者”,只要有一个条件成立,该行就入选:
- SELECT name FROM products WHERE category = ‘phone’ OR category = ‘tablet’;
- 注意 OR 的优先级比 AND 低,混用时务必加括号,否则容易出错:WHERE a=1 AND b=2 OR c=3 实际等价于 (a=1 AND b=2) OR c=3,不是你想的 a=1 AND (b=2 OR c=3)
- 多个 OR 可考虑改用 IN 简化:WHERE category IN (‘phone’, ‘tablet’, ‘laptop’)
NOT 和 NULL 特殊处理:别踩坑
NOT 用于取反,但和 NULL 结合时要特别小心:
- WHERE NOT (status = ‘cancelled’) 能筛出非取消状态,但不会包含 status 为 NULL 的行(因为 NULL = ‘cancelled’ 返回的是 UNKNOWN,NOT UNKNOWN 还是 UNKNOWN,不等于 TRUE)
- 判断 NULL 必须用 IS NULL 或 IS NOT NULL,不能用 = NULL 或 != NULL
- 安全写法示例:WHERE (status != ‘cancelled’) OR (status IS NULL)