zoukankan      html  css  js  c++  java
  • SQL中EXCEPT和Not in的区别?

    初始化两张表:

    CREATE TABLE tb1(ID int) 
    INSERT tb1          SELECT NULL
    UNION  ALL          SELECT NULL
    UNION  ALL          SELECT NULL
    UNION  ALL          SELECT 1
    UNION  ALL          SELECT 2
    UNION  ALL          SELECT 2
    UNION  ALL          SELECT 2
    UNION  ALL          SELECT 3
    UNION  ALL          SELECT 4
    UNION  ALL          SELECT 4

     

    CREATE TABLE tb2(ID int)

    INSERT tb2        SELECT NULL

    UNION  ALL          SELECT 1

    UNION  ALL          SELECT 3

    UNION  ALL          SELECT 4

    UNION  ALL          SELECT 4

     A:

    SELECT * FROM tb1

    SELECT * FROM tb2

     

    SELECT * FROM tb1 EXCEPT SELECT * FROM tb2;

    SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2);--得不到任何值

    结果:

    B、我先删除表tb1的是NULL值的行

    --DELETE FROM tb1 where id is null

    B、

    SELECT * FROM tb1 EXCEPT SELECT * FROM tb2;

    SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2);--得不到任何值

    结果:同上A

    C、把表tb2的是NULL值的行也删除

    --DELETE FROM tb2 where id is null

    C、

     

     

    SELECT * FROM tb1 EXCEPT SELECT * FROM tb2;

    SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2);

    结果:

    这是两张表中都没有NULL值时,得到的结果;

    D、在tb1表中插入一条NULL值

    D、

     

    SELECT * FROM tb1 EXCEPT SELECT * FROM tb2;

    SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2);

    结果:

    以上例子说明: 

    except会去重复, not in 不会(除非你在select中显式指定)

    except用于比较的列是所有列, 除非写子查询限制列, not in 没有这种情况

    表tb2中如果有null值的话,not in查询得不到值(如:A、B)

    表tb1中如果有null值,not in不会查询出这个null值(如:D),而except可以查询到

    当然通过对子查询指定不为NULL的话,NOT IN自然会得到值,如:

    SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2 WHERE ID IS NOT NULL);

    这里是需要注意的,如果你的字段运行为NULL,又欲使用NOT IN那么就需要这么做

  • 相关阅读:
    ubuntu下环境变量
    Linux/Unix里,ln -s
    ubuntu安装和查看已安装
    Android系统中 setprop,getprop,watchprops命令的使用
    js中Math.random()生成指定范围数值的随机数
    mysql下sql语句 update 字段=字段+字符串
    铁道部2012年版全国72个铁路枢纽城市
    phprpc 使用实例(例实没错却不能执行)函数冲突gzdecode
    电脑开机一直蓝屏,一直重启要怎么办?
    电脑重装系统重装不了,老是蓝屏,是不是硬盘烧坏了!
  • 原文地址:https://www.cnblogs.com/accumulater/p/6811830.html
Copyright © 2011-2022 走看看