Mysql 使用时候,关于 and/or 于 “非“ 的使用时会遇上的逻辑问题

本文探讨了在SQL查询中AND和OR操作符如何影响查询结果,特别是在过滤条件组合使用时。举例说明了一个错误的查询语句导致数据为空的原因,并提出了解决方案。通过将AND改为OR,可以正确地获取所有不名为'lisa'或性别不是男性的学生记录。这展示了在SQL查询中理解逻辑运算符的重要性。
摘要由CSDN通过智能技术生成

假设我们有一个学生,里面name字段是名字,sex字段是性别,1表示男,2表示女。

由图中我们可知,叫 lisa 的学生有两个,一个是男,一个是女。

需求: 现在要求我们拿出这个表中 名字叫 lisa的那位男同学之外的所有同学。

第一反应我们是这样写的:

select * from student  where name!='lisa' and sex!=1

查询 name !=lisa 且性别不为男的。但是这样一查出来我们发现数据直接为空。

这是为什么呢?

其实是因为上面的语句说的是:查询所有名字不叫 lisa 的和所有性别不是男生的人员

where 中 and 的查询 在此时不是做规则的累加,而是做的交集处理。

及上面的话可以解释为,求一下两条sql语句的交集

A:

select * from student  where name!='lisa';
select * from student where sex!=1;

解决思路:

如果要解决这个问题,我们就要将 and 该为 or

select * from student  where name!='lisa' or sex!=1

这句话的意思就是只要 name !=lisa 或者 sex!=男的 我们都拿出来

这句话翻译过来就是求 A 那两条sql语句求出来的数据并集。

既 当名字 != lisa的人员全部拿出来 + sex !=1的全员拿出来。

而名字叫 lisa的这位男同学,通过第一天sql  语句,会被屏蔽掉,在第二条sql 语句时也会被屏蔽掉。算两个sql的合集都不会拿到 这边名字叫 lisa的男同学

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值