zoukankan      html  css  js  c++  java
  • PostgresQL中的NUlls first/last功能

    Nulls first/last功能简介
    Nulls first/last功能主要用于order by排序子句中,影响空值Null在排序结果中的位置。简单来说,Nulls first表示Null值在排序时一直排在所有值的前面,也就是处理order by a desc时PostgresQL执行器认为Null值大于所有值,而order by a或order by a asc时执行器认为Null值小于所有值,将Null值排在前面。Nulls last表示Null值在排序时一直排在所有值的后面,也就是处理order by a desc时PostgresQL执行器认为Null值小于所有值,而order by a或order by a asc时执行器认为Null值大于所有值,将Null值排在前面。当不指定Nulls first/last功能时,执行器默认认为Null值要大于所有值,以此为依据处理order by子句的排序结果。

    Nulls first/last功能简单展示
    以下测试均为Postgres数据库下测试,数据库版本为9.2.2,测试系统为Linux。

    普通表简单功能展示:

    Create    table  test1(a int, b int);

    Insertinto test1 values(1,2);

    Insertinto test1 values(3,4);

    Insertinto test1 values(5);

    Select * from test1 order by b desc nulls first;

    a    b

    5

    3    4

    1    2

    Select * from test1 order by b desc nulls last;

    a    b

    3    4

    1    2

    5

    Select *from test1 order by b desc nulls;  报错

    分区表简单功能展示,注意PostgresQL数据库建分区表的方式:

    createtable test_hash(a int, b int);

    createtable test_hash1(check(a>=0 and a<5)) inherits(test_hash);

    createtable test_hash2(check(a>=5)) inherits(test_hash);

    createrule test_hash_1 as on insert to test_hash where(a>=0 and a<5) do insteadinsert into test_hash1 values(NEW.a,NEW.b);

    createrule test_hash_2 as on insert to test_hash where(a>=5) do instead insertinto test_hash2 values(NEW.a,NEW.b);

    Insertinto test_hash values(1,2);

    Insertinto test_hash values(3,4);

    Insertinto test_hash values(5);

    Select *from test_hash order by b desc nulls first;

    a      b

    5

    3      4

    2      2

    Select *from test_hash order by b desc nulls last;

    a      b

    3      4

    1      2

    5

    以上均是select语句中的order by子句进行的Nulls first/last功能展示,创建索引等其他需要order by子句的地方同理。这里只是简单的展示了一下功能,有时间会写一些剖析PostgresQL数据库的文章出来

  • 相关阅读:
    Spring系列之访问数据库
    (转载)Java反射机制
    Spring系列之IOC容器
    SpringMVC系列之基本配置
    Java中Comparable和Comparator区别小结
    计算机网络知识点回顾
    Java内部类
    Java接口回调机制
    linux mysql-bin.000001占用磁盘空间过大解决方法
    linux mysql数据库登录密码忘记了怎么办
  • 原文地址:https://www.cnblogs.com/kungfupanda/p/4826332.html
Copyright © 2011-2022 走看看