表结构
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"
不是筛选掉,而是筛选出
我的说法有些没问题的,但是无论是筛选掉还是筛选出,and是需要满足两个条件不是吗?
可是被筛选掉的两条记录没有一条是同时满足两个条件
@C#HelloWord!!!: 是啊 查出来的数据都是满足2个条件的 没查出来的1和3都是只满足了一个条件
@C#HelloWord!!!: 正是因为不满足 所以被筛掉了
好吧,是我的问题,关于筛选掉和筛选出的理解有误,果然是这样
1 "516" "男" "联系方式未知" "1"
3 "51666" "男" "联系方式未知" "3"
我误入了一个错误的思想
我认为and是两遍同时满足才为真
但是我忽略了where的条件筛选机制为筛选出,而不是筛选掉
所以这两天记录没有同时满足id !=1 AND NAME !='51666'这个判断
没有过滤出来他们
感谢您的解惑愿您的代码一路无红
全部AND :其中一个条件已经为FALSE后续条件毫无意义
全部OR:其中一个条件已经为TRUE后续条件毫无意义
所以如上结果,虽然很绕。
在 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 连接条件时,只需要满足其中一个条件就会保留。在你的例子中,两个查询的结果是符合这一逻辑的。如果你想要不同的逻辑,请调整条件的组合。
您好,看了您的回复我发现我的问题写错了,正如您所述:
SELECT * FROM emp WHERE id != 1 AND name != '51666';
这个查询是要找出 id 不等于 1 并且 name 不等于 '51666' 的记录。但是,由于你使用的是 AND 连接条件,这意味着两个条件都必须同时满足才会被筛选掉。如果其中一个条件满足,但另一个条件不满足,记录仍然会被保留。
被筛选掉的记录为:
1 "516" "男" "联系方式未知" "1"
3 "51666" "男" "联系方式未知" "3"
这两条记录都是只满足了and左右条件的其中之一
为何会被筛选掉