MYSQL中and和or一起作为where条件 查询结果错误问题

本文通过实例展示了在MySQL查询中AND和OR操作符的优先级问题,解释了为何不加括号时查询结果会出现错误。作者强调了在使用OR时应注意使用括号来明确优先级,以确保查询结果的准确性。通过调整查询语句并添加括号,最终得到了正确的查询结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MYSQL中and和or一起作为where条件 查询结果错误问题

1、先创建表

create table user_info(
    id int auto_increment primary key comment '主键id',
    name varchar(20) comment '姓名',
    sex tinyint comment '性别 1 男 2 女',
    age int comment '性别',
    id_card varchar(20) comment '身份证号',
    create_time datetime comment '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC comment '用户信息表';



insert into user_info(name, sex, age, id_card, create_time) values ('小明',1,18,null,now()),
                                                                   ('小红',2,16,null,now()),
                                                                   ('小张',1,17,null,now()),
                                                                   ('小花',1,18,null,now()),
                                                                   ('小李',2,16,null,now()),
                                                                   ('小王',1,17,null,now()),
                                                                   ('小白',2,17,null,now()),
                                                                   ('笑笑',1,17,null,now());

2、假如想要查询 sex = 2 且年龄为17或18的人员信息
最初写到的sql为

select * from user_info where sex = 2 and age = 17 or age = 18;

查询结果为
在这里插入图片描述
很明显的查询结果是错误的,并不是我们想要的结果
再次修改sql

select * from user_info where age = 17 or age = 18 and  sex = 2 ;

查询结果如下图
在这里插入图片描述
很明显查询结果也是不对的

查询一番之后,原来是mysql中and和or执行优先级的问题,
MySQL中,AND的执行优先级高于OR。也就是说,在没有小括号()的限制下,总是优先执行AND语句,再执行OR语句。

select * from table where 条件1 AND 条件2 OR 条件3

等价于

select * from table where ( 条件1 AND 条件2 ) OR 条件3

select * from table where 条件1 AND 条件2 OR 条件3 AND 条件4

等价于

select * from table where ( 条件1 AND 条件2 ) OR ( 条件3 AND 条件4 )

3、上面的查询再次修改之后:

select * from user_info where sex = 2 and (age = 17 or age = 18);

查询结果:
在这里插入图片描述
查询结果正确,完成,在下次使用and和or的时候一定需要注意其优先级的问题。使用or时 可以使用小括号进行连接。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值