1.在Oracle中进行查询排序时
如果排序字段里面有空值的情况下,排序结果可能会达不到自己想要的结果。
如 select * from tableTest order by VISITS desc
将原来的sql语句改写为:select * from tableTest order by VISITS desc nulls last,"nulls last"控制将空值记录放在后面,当然,你也可以用"nulls first"将控制记录放在前面。
oracle 空值处理,排序过滤
Oracle
认为 null 最大。
升序排列,
默认情况下,null值排后面。
降序排序,
默认情况下,null值排前面。
有几种办法改变这种情况:
(1)用 nvl 函数或decode 函数 将null转换为一特定值
(2)用case语法将null转换为一特定值(oracle9i以后版本支持。和sqlserver类似):
order by (case mycol when null then ’北京漂客’ else mycol end)
(3)使用nulls first 或者nulls last 语法。
这是
oracle
专门用来null值排序的语法。
nulls first :将null排在最前面。如:select * from mytb order by mycol nulls first
null last :将null排在最后面。如:select * from mytb order by mycol nulls last
2.【sqlserver】:
sqlserver 认为 null 最小。
升序排列
:null 值默认排在最前。
要想排后面,则:order by case when col is null then 1 else 0 end ,col
降序排列
:null 值默认排在最后。
要想排在前面,则:order by case when col is null then 0 else 1 end , col desc
说明:
1、等价于没有任何值、是未知数。
2、NULL与0、空字符串、空格都不同。
3、对空值做加、减、乘、除等运算操作,结果仍为空。
4、NULL的处理使用NVL函数或者nvl2。
5、比较时使用关键字用“is null”和“is not null”。
6、空值不能被索引,所以查询时有些符合条件的数据可能查不出来,
count(*)中,用nvl(列名,0)处理后再查。
7、排序时比其他数据都大(索引默认是降序排列,小→大),
所以NULL值总是排在最后。
对null 值的比较只能是is , is not , null通过其他方式和任何值(包括null)的比较结果都是空
对null值的处理可以通过nvl(,)
select * from dual where dummy is null;
默认情况下,MySQL将null算作最小值。如果想要手动指定null的顺序,可以使用:
1.将null强制放在最前:
if(isnull(字段名),0,1) asc //asc可以省略
2.将null强制放在最后
if(isnull(字段名),0,1) dsc
if(isnull(字段名),1,0) asc //asc可以省略
对于这种使用方式的理解:
以if(isnull(字段名),0,1)为例,它的意思是将该字段根据是否为null值分成两部分,值为null行相当于得到了一个隐含的排序属性0,值为非null的行相当于得到了一个隐含的排序属性1,在排序的时候,先根据这一隐含属性进行升序排列,因为if(isnull(字段名),0,1)相当于if(isnull(字段名),0,1) asc省略了asc而已,所以自然地,排序字段为null的那些行(隐含排序属性)会在最前。
对于将null强制放在最后的语句的理解以此类推。
`code` varchar(255) DEFAULT
NULL
,
`name` varchar(255) DEFAULT
NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT into a values('
中
一', '我');
INSERT into a values('
中
二', '你');
INSERT into a
select id,sort from fwzl_house
where delFlag = 0 and id in (9807,9786,9638,9679)
order by if(is
null
(sort),1,0) , sort asc
select id,sort from fwzl_house
where delFlag = 0 and id in (9807,9786,9638,9679)
or...
<select id="selectScoreInfo" resultType="java.util.Map" parameterType="java.util.Map">
select DZShare.T_Y_SBBHDEVICE_SITE.* ,
ROUND(DZShare.T_Y_SCORE.actual_score ,2) as actual_score ,
ROUND(DZShare.T_Y_SCORE.total_score ...
p
sql
-h localhost -U postgres
CREATE DATABASE cbx6_qa_0831 WITH OWNER postgres ENCODING=’UTF8’;
pg_restore -h localhost -U postgres -W -O -d cbx6_qa_0831 D:\db\cbx_qa_2-20180515.DUMP
这里写自定义目录标题
SQL
Server空值
排序
字段
的值为
null
和非空,没有空字符串
时
字段
的值为
null
和非空,有空字符串
时
SQL
Server空值
排序
SQL
Server
中
遇到要把空值排到最前面或最后面
时
字段
的值为
null
和非空,没有空字符串
时
空值排在最后面
select id,scol from t_table order by case when scol is
null
then 1 else 0 end,scol asc
空值排在前面
select id,scol from t_ta
查询结果
中
有
NULL
值,当进行升序
排序
时
,
NULL
值默认为“最大值”,排在最后面。要想改变
NULL
值的显示顺序,只需要在
SQL
语句后面加上
NULL
S FIRST(排在前面),
NULL
S LAST(排在后面)。
1)升序排列,
NUll
值排在前面
SQL
> SELECT DISTINCT department_id FROM employees ORDER BY 1
NULL
S FI
在Oracle
中
进行查询
排序
时
,如果
排序
字段
里面有空值的情况下,
排序
结果可能会达不到自己想要的结果。
如 select * from tableTest order by VISITS desc
将原来的
sql
语句改写为:
select * from tableTest
order by VISITS desc
null
s last
"
null
s last"控制将空值记录放
在
排序
时
,我们可能会遇到
排序
字段
为
null
的情况,但是又需要该
null
数据(即不能限制该
字段
is not
null
),而一般情况下我们都希望非
null
数据在前面。我们来看下这两种情况:
升序
排序
(默认
排序
)
时
,
null
默认会放在最后面,当然如果我们需要
null
在前面,可以这样:ORDER BY tn_time ASC
NULL
S FIRST
降序
时
,
null
默认会放在最前面,我们可以使用 ORDER BY tn_time DESC
NULL
S LAST 将
null
放到最后面。
参考:https://b
值,它们也会相应地被升序排列或降序排列;值,并控制其排在最前面还是最后面。值排到最前面或者最后面(像 Oracle 那样),否则你就得添加一个辅助列。辅助列(只存在于查询语句里,而不存在于表
中
)的目的是,让你能够识别出。根据你希望的
排序
方式(以及你所使用的数据库管理系统如何处理。表的 COMM 列对查询结果进行
排序
,但该
字段
可能为。这样一来,你就能在不影响非。值都放到最后面,那么你就要使用。值
排序
问题
),你能够对可能为。的列进行升序排列或者降序排列。返回的值,你就能在不影响。值,例如,你可能想把非。
7 rows selected.
2.不加“关照”的order by降序
排序
效果–
NULL
值在前。
sec@ora10g> select * from t order...