一、not in/not exists+null
SQL> create table usertable (userid integer,username varchar2(10));
SQL> create table usergrade (userid integer,username varchar2(10),grade number);
SQL> insert into usertable values (1,‘user1‘);
SQL> insert into usertable values (2,null);
SQL> insert into usertable values (3,‘user3‘);
SQL> insert into usertable values (4,null);
SQL> insert into usertable values (5,‘user5‘);
SQL> insert into usertable values (6,‘user6‘);
SQL> insert into usergrade values (1,‘user1‘,90);
SQL> insert into usergrade values (2,null,90);
SQL> insert into usergrade values (7,‘user7‘,90);
SQL> insert into usergrade values (8,‘user8‘,90);
SQL> select count(*)
from usergrade
where username not in (select username from usertable);
count(*)
----------
0
SQL> select count(*)
from usergrade g
where not exists (select null
from usertable t
where t.userid=g.userid and t.username=g.username);
count(*)
----------
3
SQL>select * from dual where null = null;
SQL>select * from dual where null <> null;
SQL>select * from dual where null is null;
--有結果,null is null不是比較,而是說(shuō)null 是個(gè)null
SQL>select * from dual where null in (select null from dual);
SQL>select * from dual where dummy not in (select null from dual);
-- not in實(shí)際上是用!=依次比較列表,然后去and,TRUE AND NULL = NULL。只要列表包括null值,就會(huì )返回FALSE
SQL>select * from dual where dummy in (null,‘X‘); --有結果
-- in后里面的列表可以包括null,但是因為相當于用=依次比較,然后去or,true or null = true,所以他們是被忽視的
聯(lián)系客服