sql 中and 和or的用法,请指导,谢谢

“select * from 送奶信息 where 喝奶时间='早'and 订奶类别='250ml巴氏鲜奶'or 订奶类别='500ml巴氏鲜奶'”
我用上面的语句查找时,为什么,“早”和“晚”的数据全出来了

这是逻辑运算符优先次序没交代清楚所导致的。

按照提问中的代码筛选逻辑,系统会检索出"喝奶时间"为'早' 且"订奶类别"为'250ml巴士氏鲜奶'的记录,或者"订奶类别"为'500ml巴氏鲜奶'的记录。第一个是双条件筛选,第二个是单条件筛选,只要是500ml巴氏鲜奶,不管它是早或晚,只要是500毫升的就能被查出来。

为了将'晚'筛选掉,建议使用括号来区分优先级别,代码修改如下:

select * from 送奶信息 where 喝奶时间='早' and (订奶类别='250ml巴氏鲜奶' or 订奶类别='500ml巴氏鲜奶');

这样喝奶时间为'晚'的记录就会被筛选掉了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-03-11
你忘了加括号
select * from 送奶信息 where 喝奶时间='早'and (订奶类别='250ml巴氏鲜奶'or 订奶类别='500ml巴氏鲜奶')
若果你不加这个括号,他就认为符合or条件前后任意一个即可,也就是相当于
where (喝奶时间='早'and 订奶类别='250ml巴氏鲜奶') or 订奶类别='500ml巴氏鲜奶'
后面条件订奶类别='500ml巴氏鲜奶'肯定包含了早和晚。本回答被提问者采纳
相似回答