但not in就不一样了,not in要与集合中每条记录比较,每条记录都不相同才返回true。当集合中包含null时,每条记录与之比较都会退出,所以返回的集合也必定为null 因此,not in 判断的集合不能包含null,而in判断的集合可以包括null 此外,如果一个字段a可以取值 Y,N和null;如果要取出所有不为Y的记录,不能写成 where ...
当子查询有返回null值时,not in不会有结果返回,如: SQL> select ename from emp where deptno not in(10,20,null) 2 / no rows selected 原因是: deptno not in(10, 20, null) ===> not (deptno in(10, 20, null)) ===> not (deptno=10 or deptno=20 or deptno=null) ===> deptno<>10...
从连接类型来看,使用not in与not exists子查询构造的语句都属于反连接,为了控制连接顺序与连接方式,这种反连接经常被改写为外连接,t1 与t2使用左外连接,条件加上右表t2的连接列 is null,也就是左外连接时没有关联上右表的数据,表达了这个含义“t1表中c2列值在t2表的c2列值中不存在的记录”。反连接改写为外...
Null本身就是作为一个奇葩的存在,它的意义是UnKonwn。顺口溜来了:未知就是未知 未知不等于未知 未知不...
1NOTIN(2,NULL)等价于 1<>2AND1<>NULL 和 NULL 值的任何比较均为 UNKNOWN,于是为 TRUEANDUNKNOWN...
同事说查询遇到一个奇怪的事,2个表进行not in 操作没有返回结果,正常情况下应该是有返回的。 一.问题重现 一般来说,问题能重现就是好消息,最怕不能重现。 SQL> connscott/tiger; Connected. SQL> descemp Name Null? Type --- --- EMPNO NOT NULLNUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(9) MGR ...
1、有两个数组(1)、array(1,2);(2)、array(1);(1)(2)这两个数组的值都不固定,只能通过foreach 结合in_array()获得不相交集吗?2、SQL 使用not in 和 in 还有Null 在执行效率上有什么不同?最好能举例子...
SELECT * FROM products WHERE product_id NOT IN (1, 2, 3); 在处理 NULL 值时,NOT IN 子句可能会导致意外的结果。当 NULL 值与任何其他值进行比较时,结果都是 NULL,而不是 TRUE 或FALSE。因此,在使用 NOT IN 子句时,如果其中一个列表值为 NULL,则整个条件将被视为 NULL,而不是 TRUE 或FALSE。 例...
本文不是为了讨论效率问题,是要提醒一点:not in子查询的结果集含NULL值时,会导致整个语句结果集返回空,这可能造成与SQL语句书写初衷不符。 前言 开发人员写的SQL语句中经常会用到in,exists,not in,not exists 这类子查询,通常,含in、exists的子查询称为半连接(semijoin),含not in、 not exists的子查询被称...
zx@TEST>select * from t_in where id not in (1,3,null); no rows selected 上面查询的where条件等价于id!=1 and id!=3 and id!=null,根据上面的规则,NULL与其他值做=或!=比较结果都是UNKNOWN,所以整个条件就相当于FALSE的,最终没有查出数据。