查询月薪是3000与5000的员工的信息。
select * from emp where sal =any(3000,5000); ---这可以
查询所有月薪不是3000与5000的员工的信息。
select * from emp where sal !=any(3000,5000); ----这错误 ,为什么?
select * from emp where sal <> any(3000,5000);--查询不对,为什么?
select * from emp where sal not in(3000,5000); ---这可以
select * from emp where sal =any(3000,5000); ---这可以
查询所有月薪不是3000与5000的员工的信息。
select * from emp where sal !=any(3000,5000); ----这错误 ,为什么?
select * from emp where sal <> any(3000,5000);--查询不对,为什么?
select * from emp where sal not in(3000,5000); ---这可以
如果你這樣寫
select * from emp where sal !=any(5000);
則5000的就被排除掉了,明白了?
因为这句话的意思就是查找工资既不等于3000也不等于5000的信息!
而实际中怎噩梦可能存在即是3000又是5000的数据呢?
=any(3000,5000) 表示工资为3000或5000的,所以会把3000 和5000的都查出来;
而<>any(3000,5000) ,应该就是说不等于3000或者不等于5000,所以会把所有的结果查出来。对这个函数不了解,我试了一下,根据结果分析,应该是这样的。
二楼的说法不正确,“sal既不為3000,又不為5000,你認為這樣的數據能存在嗎”,当然可能,4000是干嘛的。
而not any,,, 相当于 <>a and <>b你要是用 <> any (a,b) 这个就相当于 <>a or <>b, 这样不是说所有的数值都能满足这个条件么?
所以根本没有意义
我执行这条没报错不过就像楼上所说这么做没意义,就像
select * from b;
一样的结果