当前位置:数据库 > SQLServer >>

PostgresQL中的NUlls first/last功能

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值排在前面。
  www.zzzyk.com  
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。
 
普通表简单功能展示:  www.zzzyk.com  
 
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;  报错  www.zzzyk.com  
 
分区表简单功能展示,注意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数据库的文章出来。
 
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,