分享

blisshu‘s BLOG

 昵称6524 2007-03-01

一、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不是比较,而是说null 是个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实际上是用!=依次比较列表,然后去andTRUE AND NULL = NULL。只要列表包括null值,就会返回FALSE
SQL>select * from dual where dummy in (null,
‘X‘);   --有结果
--
in后里面的列表可以包括null,但是因为相当于用=依次比较,然后去ortrue or null = true,所以他们是被忽视的

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多