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的。

  • 相关阅读:
    灰度图像的直方图
    两幅图像的融合与叠加
    图像像素基本操作——自然系列滤镜
    图像像素加减乘除操作
    调整图像亮度、对比度、饱和度
    基于BufferedImage的图像滤镜演示
    Java——BufferedImage操作实例
    Java——BufferedImage对象
    Java——绘制五角星
    Java——自定义外部字体文件
  • 原文地址:https://www.cnblogs.com/wujin/p/2420211.html
Copyright © 2011-2022 走看看