查询月薪是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); ---这可以

解决方案 »

  1.   

    你要明白一個道理,any是任意的,sal !=any(3000,5000); 也就是sal既不為3000,又不為5000,你認為這樣的數據能存在嗎,因此你選出來的還是全部信息
    如果你這樣寫
    select * from emp where sal !=any(5000);
    則5000的就被排除掉了,明白了?
      

  2.   

    select * from emp where sal <> any(3000,5000);--查询不对,为什么?
    因为这句话的意思就是查找工资既不等于3000也不等于5000的信息!
    而实际中怎噩梦可能存在即是3000又是5000的数据呢?
      

  3.   

    any(3000,5000) 这个应该是或者的关系。
    =any(3000,5000) 表示工资为3000或5000的,所以会把3000 和5000的都查出来;
    而<>any(3000,5000) ,应该就是说不等于3000或者不等于5000,所以会把所有的结果查出来。对这个函数不了解,我试了一下,根据结果分析,应该是这样的。
    二楼的说法不正确,“sal既不為3000,又不為5000,你認為這樣的數據能存在嗎”,当然可能,4000是干嘛的。
      

  4.   

    any和some用法是一样的!及select * from emp where sal =any(3000,5000);和select * from emp where sal =some(3000,5000)用法结果是一样的。而any的非集合为<>all(3000,5000);
      

  5.   

    any 只有 =any(a,b) 和 not any 的用法因为=any(a,b), 可以理解成 =a or =b 
     而not any,,, 相当于  <>a  and <>b你要是用 <> any (a,b)  这个就相当于 <>a or <>b, 这样不是说所有的数值都能满足这个条件么?
    所以根本没有意义
      

  6.   

    select * from b where id != any(1,2);
    我执行这条没报错不过就像楼上所说这么做没意义,就像
    select * from b;
    一样的结果