吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1289|回复: 17
收起左侧

[讨论] SqlServer 等于和不等于的计算

  [复制链接]
7R903 发表于 2022-11-23 13:07
本帖最后由 cn005897 于 2022-11-23 13:20 编辑

总数5条,SQLServer版本:18.11.1

查询1返回一条数据:
[SQL] 纯文本查看 复制代码
select * from Test where columnName='张三' and age='30'

查询2返回两条数据(李四、王五):
[SQL] 纯文本查看 复制代码
select * from Test where columnName<>'张三' and age<>'30'

查询2的结果不应该是:总数(5)-查询1(1)=查询2(5-1=4)?为何是总数(5)-查询1(1)=查询2(5-1=2)

通过主键查询
查询3返回一条数据:
[SQL] 纯文本查看 复制代码
select * from Test where columnName='张三' and id=1

查询4返回三条数据(李四、王五、赵六):
[SQL] 纯文本查看 复制代码
select * from Test where columnName<>'张三' and id<>1

查询4的结果不应该是:总数(5)-查询3(1)=查询4(5-1=4)?为何是总数(5)-查询1(1)=查询2(5-1=3)


表结构如下:
[SQL] 纯文本查看 复制代码
create table Test
(
        id int primary key identity(1,1),
        columnName nvarchar(15),
        age nvarchar(15)
)

insert into Test values
('张三','30'),
('李四','20'),
('王五','22'),
('张三','40'),
('赵六','30')

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

兰色毒药 发表于 2022-11-23 13:17
你的查询2 姓名不等于‘张三’并且年龄不等于30,
pansophy 发表于 2022-11-23 13:19
 楼主| 7R903 发表于 2022-11-23 13:19
兰色毒药 发表于 2022-11-23 13:17
你的查询2 姓名不等于‘张三’并且年龄不等于30,

姓名不等于‘张三’并且年龄不等于30,不是只有第一条记录符合条件吗,为啥返回的结果只有(李四、王五)
兰色毒药 发表于 2022-11-23 13:24
本帖最后由 兰色毒药 于 2022-11-23 13:25 编辑

李四,20;王五,22,不是符合要求吗,不等于张三并且不是30
flylg999 发表于 2022-11-23 13:30
本帖最后由 flylg999 于 2022-11-23 13:43 编辑

你的想法应该是这样:
select * from Test  where not (columnName='张三' and age='30')

而你的句子:
select * from Test  where  columnName<>'张三' and age<>'30'

你拆分成两步看看
第一步,先是<>张三,再从<>张三 的结果 里面查找  <>30


sshot-2.png

尝试多用 (  ) 包裹整体
 楼主| 7R903 发表于 2022-11-23 13:31
兰色毒药 发表于 2022-11-23 13:24
李四,20;王五,22,不是符合要求吗,不等于张三并且不是30

这个是按行匹配的吧,赵六、30也不等于张三、30啊
ctacy 发表于 2022-11-23 13:39
你这个SQL查询返回的数据没有问题吧?
layuai 发表于 2022-11-23 13:41
你这关系都没理解清楚,建议去学习一下判断语句,练一下逻辑思考
cxsljw 发表于 2022-11-23 13:43
看来楼主是新手。刚玩数据库。。。

select * from Test where columnName<>'张三' and age<>'30'
姓名不是张三,并且年龄不是30 。结果只有 ('李四','20'), ('王五','22'), 符合条件。
('张三','30'),('张三','40'),('赵六','30'),这3个,不是姓名是张三,就是年龄是30。不符合条件。


select * from Test where columnName<>'张三' and id<>1
('李四','20'),('王五','22'),('赵六','30') ,符合 姓名不是张三,且序列不是1。
('张三','30') 这条,姓名是张三且序列为1,不符合条件。('张三','40') 这条,不符合姓名不为张三,虽然序列不为1符合条件,但是,and 是并且的,必须不为张三且序列不为1同时成立才行。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 04:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表