SQL 逻辑运算符NOT与or / and 搭配使用,不解...

MascotBoy 2008-04-23 06:39:14
SQL 逻辑运算符NOT与or / and 搭配使用,不解...
简单数据:
id name phone
2006001 张三 123456789
2006002 李四 1234567891
2006003 陈璐 1234567892
2006004 吴号 1234567893
2006005 叶高 1234567894


select * from school.dbo.Student
where not (name!='李四' or id='2006003')
结果是:
id name phone
2006002 李四 1234567891



如果换成AND
select * from school.dbo.Student
where not (name!='赵璐' and id='2006003')
结果是:
id name phone
2006001 张三 123456789
2006002 李四 1234567891
2006004 吴号 1234567893
2006005 叶高 1234567894


不解.or意思是:其中一个条件满足就返回结果,怎么会得出:2006002 李四 1234567891
and 意思是:二者满足时就返回结果,怎么也会得出:2006003 陈璐 1234567892

...全文
1970 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
码上富贵 2010-02-19
  • 打赏
  • 举报
回复
一楼的第二个T-sql好像与楼主的有差异,楼主是问为什么
cxmcxm 2008-04-23
  • 打赏
  • 举报
回复
--not 为非的意思,考虑不要not 的情况
select * from school.dbo.Student
where (name!='李四' or id='2006003'
--得出的结果应该为

2006001 张三 123456789
2006003 陈璐 1234567892
2006004 吴号 1234567893
2006005 叶高 1234567894

--除记录李四未出来,其它记录都出来,加上not 当然就变成只有李四出来,其它记录都不出来

select * from school.dbo.Student
where (name!='赵璐' and id='2006003')
--name!='赵璐'得出所有记录
2006001 张三 123456789
2006002 李四 1234567891
2006003 陈璐 1234567892
2006004 吴号 1234567893
2006005 叶高 1234567894
--加上id='2006003'就得出 陈璐一条记录
2006003 陈璐 1234567892

--加上not 就变为除陈璐外的其它记录

2006001 张三 123456789
2006002 李四 1234567891
2006004 吴号 1234567893
2006005 叶高 1234567894
niliqing 2008-04-23
  • 打赏
  • 举报
回复
呵呵,那么详细,楼主你要好好补补SQL SERVER
MascotBoy 2008-04-23
  • 打赏
  • 举报
回复
谢谢,感谢hery2002的作答 !
hery2002 2008-04-23
  • 打赏
  • 举报
回复 2

use [csdn]
go
create table student(id nvarchar(10),cname nvarchar(20),phone nvarchar(20))
go
insert into student values('2006001','张三','123456789')
insert into student values('2006002','李四','1234567891')
insert into student values('2006003','陈璐','1234567892')
insert into student values('2006004','吴号','1234567893')
insert into student values('2006005','叶高','1234567894')
go
select * from student where not ( cname!='李四' or id='2006003')
--相当于
select * from student where cname ='李四' and id !='2006003'
/*
id cname phone
---------- -------------------- --------------------
2006002 李四 1234567891

(1 row(s) affected)

*/
go
select * from student where not (cname!='陈璐' and id='2006003')
--相当于
select * from student where cname ='陈璐' or id !='2006003'
/*
id cname phone
---------- -------------------- --------------------
2006001 张三 123456789
2006002 李四 1234567891
2006003 陈璐 1234567892
2006004 吴号 1234567893
2006005 叶高 1234567894

(5 row(s) affected)
*/

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧