zoukankan      html  css  js  c++  java
  • union 中null值合并原理

    正常情况下null<>null 的,但是在union中如果有两个null值,那么只会显示一个。

    1.null<>null

     下例中可以看出null<>null

    SQL>  select * from dual;

    DU
    --
    X

    SQL> select * from dual where null=null;

    未选定行

    可以看出加上条件那么是查不出数据的,可以看出null<>null;

    2.union 中null值

      都知道union是去除的,那么既然null<>null,那么会显示几个null值呢

      首先创建两个表

    SQL> create table t1(x int);

    表已创建。

    SQL> create table t2(x int);

    表已创建。

    插入测试数据

    SQL> Insert into t1 values(1);

    已创建 1 行。

    SQL> Insert into t1 values(null);

    已创建 1 行。

    SQL> Insert into t2 values(null);

    已创建 1 行。

    查询语句

    用PL/SQL DEV来显示比较明显

    可以看出显示出来时两条数据

    那这是什么原理呢?这是oracle内部有一个未公开的函数sys_op_map_nonnull 我们开测试一下这个函数

    SQL> select sys_op_map_nonnull(null) from dual;
     
    SYS_OP_MAP_NONNULL(NULL)
    ------------------------
    FF

    看到sys_op_map_nonnull(null) =FF 那么oracle在union时会自动的调用这个函数,自动的转换,FF=FF所以就过滤掉了。

    接着最开始的语句再测试下

    SQL> select * from dual where sys_op_map_nonnull(null) = sys_op_map_nonnull(null);

    DU
    --
    X

    可以看到它们是相等的

    在oracle内部会经常用这个函数来处理null的。

  • 相关阅读:
    jquery2
    数据库回顾
    jquery
    BOM DOM 注意事項
    JavaScript 注意
    javascrip
    CSS
    html
    网络编程
    淘宝下单高并发解决方案
  • 原文地址:https://www.cnblogs.com/wujin/p/2420211.html
Copyright © 2011-2022 走看看