首页 新闻 会员 周边

SQL中的并且(and)和或者(or)为何遇到!=之后和定义不一样

0
悬赏园豆:60 [已解决问题] 解决于 2024-01-28 14:32
表结构
id     name      gender   mobile      dep_id
1	"516"	"男"	"联系方式未知"	"1"
2	"5166"	"男"	"联系方式未知"	"2"
3	"51666"	"男"	"联系方式未知"	"3"
4	"wyh"	"女"	"联系方式未知"	"1"
5	"wyx1"	"女"	"联系方式未知"	"3"
6	"wyx2"	"女"	"联系方式未知"	"3"




SELECT * FROM emp WHERE id !=1 AND NAME !='51666';
结果
2	"5166"	"男"	"联系方式未知"	"2"
4	"wyh"	"女"	"联系方式未知"	"1"
5	"wyx1"	"女"	"联系方式未知"	"3"
6	"wyx2"	"女"	"联系方式未知"	"3"
既然是and不应该是需要同时满足两个条件才筛选掉吗?
为何
1	"516"	"男"	"联系方式未知"	"1"
3	"51666"	"男"	"联系方式未知"	"3"
这两条只满足其中之一被筛选掉了



SELECT * FROM emp WHERE id !=1 or NAME !='51666';
结果
1	"516"	"男"	"联系方式未知"	"1"
2	"5166"	"男"	"联系方式未知"	"2"
3	"51666"	"男"	"联系方式未知"	"3"
4	"wyh"	"女"	"联系方式未知"	"1"
5	"wyx1"	"女"	"联系方式未知"	"3"
6	"wyx2"	"女"	"联系方式未知"	"3"
既然是or不应该是只满足一个条件就筛选掉了吗?
同理为何两条没被筛选掉
1	"516"	"男"	"联系方式未知"	"1"
3	"51666"	"男"	"联系方式未知"	"3"
C#HelloWord!!!的主页 C#HelloWord!!! | 初学一级 | 园豆:19
提问于:2024-01-22 09:22
< >
分享
最佳答案
0

不是筛选掉,而是筛选出

  • and:筛选出同时满足两个条件的数据;
  • or:筛选出至少满足一个条件的数据;
收获园豆:30
复制粘贴机器人 | 小虾三级 |园豆:697 | 2024-01-22 10:23

我的说法有些没问题的,但是无论是筛选掉还是筛选出,and是需要满足两个条件不是吗?
可是被筛选掉的两条记录没有一条是同时满足两个条件

C#HelloWord!!! | 园豆:19 (初学一级) | 2024-01-28 14:24

@C#HelloWord!!!: 是啊 查出来的数据都是满足2个条件的 没查出来的1和3都是只满足了一个条件

复制粘贴机器人 | 园豆:697 (小虾三级) | 2024-01-28 14:26

@C#HelloWord!!!: 正是因为不满足 所以被筛掉了

复制粘贴机器人 | 园豆:697 (小虾三级) | 2024-01-28 14:27

好吧,是我的问题,关于筛选掉和筛选出的理解有误,果然是这样
1 "516" "男" "联系方式未知" "1"
3 "51666" "男" "联系方式未知" "3"
我误入了一个错误的思想
我认为and是两遍同时满足才为真
但是我忽略了where的条件筛选机制为筛选出,而不是筛选掉
所以这两天记录没有同时满足id !=1 AND NAME !='51666'这个判断
没有过滤出来他们
感谢您的解惑愿您的代码一路无红

C#HelloWord!!! | 园豆:19 (初学一级) | 2024-01-28 14:31
其他回答(2)
0

全部AND :其中一个条件已经为FALSE后续条件毫无意义
全部OR:其中一个条件已经为TRUE后续条件毫无意义
所以如上结果,虽然很绕。

收获园豆:20
56180825 | 园豆:1756 (小虾三级) | 2024-01-22 11:15
0

在 SQL 中,使用 AND 和 OR 连接多个条件时,需要考虑条件之间的逻辑关系。让我们来解释你的两个查询的结果:

查询1:
sql
Copy code
SELECT * FROM emp WHERE id != 1 AND name != '51666';
这个查询是要找出 id 不等于 1 并且 name 不等于 '51666' 的记录。但是,由于你使用的是 AND 连接条件,这意味着两个条件都必须同时满足才会被筛选掉。如果其中一个条件满足,但另一个条件不满足,记录仍然会被保留。所以,id != 1 条件满足了第一行,而 name != '51666' 条件满足了第三行,所以这两行都没有被筛选掉。

查询2:
sql
Copy code
SELECT * FROM emp WHERE id != 1 OR name != '51666';
这个查询是要找出 id 不等于 1 或者 name 不等于 '51666' 的记录。由于使用了 OR 连接条件,只要其中一个条件满足,记录就会被保留。所以,第一行满足了 id != 1,而第三行满足了 name != '51666',所以这两行都没有被筛选掉。

总结:在使用 AND 连接条件时,需要同时满足所有条件才会被筛选掉;而在使用 OR 连接条件时,只需要满足其中一个条件就会保留。在你的例子中,两个查询的结果是符合这一逻辑的。如果你想要不同的逻辑,请调整条件的组合。

收获园豆:10
Technologyforgood | 园豆:5675 (大侠五级) | 2024-01-23 17:21

您好,看了您的回复我发现我的问题写错了,正如您所述:
SELECT * FROM emp WHERE id != 1 AND name != '51666';
这个查询是要找出 id 不等于 1 并且 name 不等于 '51666' 的记录。但是,由于你使用的是 AND 连接条件,这意味着两个条件都必须同时满足才会被筛选掉。如果其中一个条件满足,但另一个条件不满足,记录仍然会被保留。
被筛选掉的记录为:
1 "516" "男" "联系方式未知" "1"
3 "51666" "男" "联系方式未知" "3"
这两条记录都是只满足了and左右条件的其中之一
为何会被筛选掉

支持(0) 反对(0) C#HelloWord!!! | 园豆:19 (初学一级) | 2024-01-28 14:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册