电脑课堂
柔彩主题三 · 更轻盈的阅读体验

SQL查询多个条件怎么写才不报错

发布时间:2025-12-10 22:05:48 阅读:532 次

在日常工作中,查数据是最常见的任务之一。比如你在公司负责统计销售记录,领导让你找出来自北京、订单金额超过5000,并且下单时间在3月份的客户名单。这时候就得用到SQL查询多个条件了。

多个条件不是简单堆在一起就行,写错了轻则查不出结果,重则把整个表锁住,系统卡顿报警。很多人一开始容易犯一个错误:把条件全写在WHERE后面,用逗号隔开。比如:

SELECT * FROM orders WHERE city = '北京', amount > 5000, order_date LIKE '2024-03%';

这种写法直接就会报语法错误。SQL里多个条件不能用逗号分隔,得用逻辑运算符连接。

用AND和OR组合条件

正确的做法是使用AND或OR来拼接条件。上面的需求是要同时满足三个条件,就得用AND:

SELECT * FROM orders WHERE city = '北京' AND amount > 5000 AND order_date BETWEEN '2024-03-01' AND '2024-03-31';

这样数据库就知道必须同时符合这三个条件的记录才返回。如果想查“北京或者上海”的大额订单,就可以把前两个条件换成OR:

SELECT * FROM orders WHERE (city = '北京' OR city = '上海') AND amount > 5000;

注意这里加了括号,不然逻辑会乱。因为AND优先级高于OR,不加括号的话,系统可能先算后面的AND,导致结果不符合预期。

避免空值带来的坑

还有一个常见问题是字段包含NULL值。比如你想查没有填写联系电话的客户,写成:

SELECT * FROM customers WHERE phone = NULL;

这样是查不到任何结果的。判断空值得用IS NULL:

SELECT * FROM customers WHERE phone IS NULL;

同理,不为空就是IS NOT NULL。这个细节很多人一开始都栽过跟头。

IN和BETWEEN让条件更简洁

当要查的条件比较多时,别一个一个写OR。比如查北京、上海、广州、深圳四个城市的订单,写一堆OR太啰嗦。用IN可以简化:

SELECT * FROM orders WHERE city IN ('北京', '上海', '广州', '深圳');

日期或数字范围也一样,用BETWEEN比手写两个比较条件更清晰:

SELECT * FROM orders WHERE order_date BETWEEN '2024-03-01' AND '2024-03-31';

看起来清爽,也不容易写错符号。

LIKE配合通配符查模糊信息

有时候条件不是精确匹配。比如想找所有姓“张”的客户,可以用LIKE:

SELECT * FROM customers WHERE name LIKE '张%';

百分号%代表任意多个字符,下划线_代表单个字符。想查名字三个字、中间是“伟”的,可以写:

SELECT * FROM customers WHERE name LIKE '_伟_';

但要注意LIKE对大小写是否敏感,不同数据库表现不一样,测试时得多留意。

写多条件查询时,建议先在小数据集上试一遍语句,确认逻辑正确再跑大表。尤其是DELETE或UPDATE带多条件时,一不小心就删错数据,恢复起来可就麻烦了。