PostgresQL中的NUlls first/last功能

本文介绍了PostgresQL数据库中Nullsfirst/last功能的基本概念及其在orderby排序子句中的应用。通过具体示例展示了该功能如何控制空值在排序结果中的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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数据库的文章出来。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值