oracle、mssql、mysql三种数据库产品在order by时:
Oracle在Order by时缺省认为null是最大值,所以如果是ASC升序则排在最后,DESC降序则排在最前面;
mssql和mysql在order by时缺省认为null是最小值,所以如果是ASC升序则排在最前面,DESC降序则排在最后;
对任意的数据库产品,想要在按某字段排序时(不管是升序还是降序),对字段值为null的记录的出现顺序做任意的安排,可以使用以下的
通用做法:
ORDER BY CASE WHEN Col Is NULL Then 1/0 Else 0/1 End,Col [asc/desc]
Example 1:
oracle order by ,按Col升序,但是Col为null的排最前:
ORDER BY CASE WHEN Col Is NULL Then 0 Else 1 End, Col
Example 2:
mssql/mysql order by,按Col升序,但是Col为null的排最后:
ORDER BY CASE WHEN Col Is NULL Then 1 Else 0 End, Col
参见:
http://sqlblog.com/blogs/denis_gobo/archive/2007/10/19/3048.aspx
引用
Sort Values Ascending But NULLS Last
This is a frequent request in newsgroups and fora. People want to sort the column in ascending order but don't want the NULLS at the beginning.
Oracle has this syntax: ORDER BY ColumnName NULLS LAST;
SQL Server does not have this. But there are 2 ways to do this. The first one is by using case and the second one by using COALESCE and the maximum value for the data type in the order by clause.
The 2 approaches with a datetime data type
DECLARE @Temp table(Col datetime)
INSERT INTO @Temp VALUES(getdate())
INSERT INTO @Temp VALUES('2007-10-19 09:54:03.730')
INSERT INTO @Temp VALUES('2006-10-19 09:54:03.730')
INSERT INTO @Temp VALUES('2005-10-19 09:54:03.730')
INSERT INTO @Temp VALUES('2006-10-19 09:54:03.730')
INSERT INTO @Temp VALUES('2004-10-19 09:54:03.730')
INSERT INTO @Temp VALUES(NULL)
INSERT INTO @Temp VALUES(NULL)
SELECT *
FROM @Temp
ORDER BY COALESCE(Col,'9999-12-31 23:59:59.997')
SELECT *
FROM @Temp
ORDER BY CASE WHEN Col Is NULL Then 1 Else 0 End, Col
The 2 approaches with an integer data type
DECLARE @Temp table(Col int)
INSERT INTO @Temp VALUES(1)
INSERT INTO @Temp VALUES(555)
INSERT INTO @Temp VALUES(444)
INSERT INTO @Temp VALUES(333)
INSERT INTO @Temp VALUES(5656565)
INSERT INTO @Temp VALUES(3)
INSERT INTO @Temp VALUES(NULL)
INSERT INTO @Temp VALUES(NULL)
SELECT *
FROM @Temp
ORDER BY COALESCE(Col,'2147483647')
SELECT *
FROM @Temp
ORDER BY CASE WHEN Col Is NULL Then 1 Else 0 End, Col
分享到:
相关推荐
### PGSQL统计一个数据库所有数据库空字段的函数 在PostgreSQL(简称PGSQL)中,有时我们需要统计数据库中所有表的空字段数量。这在数据分析、数据清洗等场景下非常有用。下面详细介绍如何创建并使用一个自定义函数...
### 常用数据库的自增字段创建方法汇总 在数据库设计中,自增字段(自动增长字段)是非常常见的一种需求。它主要用于为主键提供唯一且连续递增的标识符,便于记录数据条目的唯一性。不同的数据库系统支持不同的自增...
select obj#, col#, name from sys.col$ where obj# = '103756' order by col#; ``` 3. 直接更新`sys.col$`表中的`col#`字段以调整顺序,如: ```sql update sys.col$ set col#=2 where obj#=103756 and name='...
`ORDER BY tablename`使得结果按表名排序。 2. **获取数据库中所有表名及表的注解信息** 如果需要获取每个表的注解(即对象描述),可以结合`pg_tables`和`pg_class`系统目录视图。`obj_description`函数用于获取...
在开发应用程序时,经常需要与数据库进行交互,这包括获取数据库中的表、视图以及它们的字段信息。本文将详细介绍如何通过SQL查询来获取这些信息,以SQL Server 2005为例。 首先,我们需要了解SQL Server的系统表。...
- 计算最高租金的前3名顾客:涉及`customer`和`payment`表的聚合查询,使用`GROUP BY`和`SUM`函数,再用`ORDER BY`和`LIMIT`进行排序和限制。 - 找出总租金最高的影片:需要连接`payment`, `rental`, `inventory`,...
在SQL数据库中获取所有表的字段及其中文描述是一项常见的需求,这对于数据库管理和数据分析至关重要。以下将详细介绍如何实现这一目标,以及涉及到的相关SQL语法。 在SQL Server 2000中,可以通过以下查询来获取...
实例2-19 获取数据库中某数据表的所有字段信息(Access) 实例2-20 获取数据库的所有查询信息(ADOX) 实例2-21 获取数据库的所有查询信息(DAO) 实例2-22 获取数据库的模式信息(OpenSchema) 实例2-23 获取...
在IT行业中,数据库是至关重要的组成部分,用于存储和管理各种数据。本文将深入探讨如何获取数据库中的表、视图及字段等信息,特别是在SQL Server 2005环境下。这通常涉及到对系统表的查询,以便获取元数据,进而...
实例2-19 获取数据库中某数据表的所有字段信息(Access) 实例2-20 获取数据库的所有查询信息(ADOX) 实例2-21 获取数据库的所有查询信息(DAO) 实例2-22 获取数据库的模式信息(OpenSchema) 实例2-23 获取...
只有当表中的某个字段允许 NULL 或者定义了 DEFAULT 值时,才可以在 INSERT 语句中省略该字段。 #### 问题5:本地索引与全局索引的差别与适用情况 - **本地索引**:对于每个表分区,都有一个对应的索引分区。当表...
通过使用内表读取数据时,通常会用到loop语句。 查询条件的动态指定允许在程序运行时根据不同的条件执行查询,例如可以在报表的选择屏幕上由用户输入查询条件。多表结合查询涉及到将两个或多个表中的数据进行联合...
根据提供的标题、描述、标签及部分内容,我们可以整理出与MySQL及Oracle数据库相关的多个知识点,具体如下: ### 一、数据库基础知识 #### 1. 数据库(Database)与数据库管理系统(DBMS) - **数据库**:一种用于...
- 因此,在使用某个具体数据库产品时,需要参考其文档了解支持的具体SQL语法和特性。 5. **利用ALTER TABLE可以做哪些事?** - 修改现有表的结构。 - 增加、删除或修改列。 - 改变已有列的数据类型、长度、是否...
2. **理解数据更新操作时要注意数据的完整性**:学习如何在更新表数据时保持数据的一致性和完整性,避免因错误的数据更新而导致的问题。 3. **理解PL/SQL语句对表数据操作的灵活控制功能**:深入理解PL/SQL提供的...
更复杂的查询可能包括WHERE子句来过滤结果,JOIN操作来合并不同表的数据,GROUP BY和HAVING子句来进行分组和条件过滤,以及ORDER BY来排序结果。例如,找出每个部门的员工人数: ```sql SELECT Department, COUNT(*...
- `OrderBy A.id, A.colorder`:按表ID和字段顺序进行排序。 **三、文档生成流程** 1. **准备阶段** - 确定需要生成文档的数据库和表范围。 - 编写如上所示的SQL查询语句。 2. **执行阶段** - 在目标数据库中...
在SQL Server 2005中,获取数据库中所有表的字段及字段中文描述通常是为了进行数据管理和文档化。以下是一些关于这个SQL查询的重要知识点: 1. **系统视图和对象**: - `sys.columns`:此视图包含了数据库中所有...
### 数据库数据查询实验知识点概览 #### 实验背景与目的 本次实验是宁夏师范学院数学与计算机科学学院《数据库》课程的一部分,旨在通过实践操作加深学生对数据库查询技术的理解和掌握。实验由褚万军老师指导,实验...