1、ORDER BY 中关于NULL的处理

缺省处理,Oracle在Order by 时觉得null是最大值,所以假设是ASC升序则排在最后,DESC降序则排在最前。

当然,你也能够使用nulls first 或者nulls last 语法来控制NULL的位置。

Nulls first和nulls last是Oracle Order by支持的语法

假设Order by 中指定了表达式Nulls first则表示null值的记录将排在最前(无论是asc 还是 desc)

假设Order by 中指定了表达式Nulls last则表示null值的记录将排在最后 (无论是asc 还是 desc)

使用语法例如以下:

--将nulls始终放在最前

select * from zl_cbqc order by cb_ld nulls first

--将nulls始终放在最后

select * from zl_cbqc order by cb_ld desc nulls last

2、几种排序的写法

单列升序:select<column_name> from <table_name> order by <column_name>; (默认升序,即使不写ASC)

单列降序:select <column_name> from <table_name> order by <column_name> desc;

多列升序:select <column_one>, <column_two> from <table_name> order by <column_one>, <column_two>;


多列降序:select <column_one>, <column_two> from <table_name> order by <column_one> desc, <column_two> desc;


多列混合排序:select <column_one>, <column_two> from <table_name> order by <column_one> desc, <column_two> asc;

3、今天看到的新写法

SQL> select * from tb;

BLOGID BLOGCLASS

---------- ------------------------------

        1 人生

        2 学习

        3 工作

        5 朋友

SQL> select * from tb order by decode(blogid,3,1,2), blogid;

BLOGID BLOGCLASS

---------- ------------------------------

        3 工作

        1 人生

        2 学习

        5 朋友

我所说的就是上面红色的那句话。实现的功能就是无论如何,BLOGID为3的值必须排在第一位,其它的记录依照BLOGID升序排序。

shiyiwan同学给我的解释是这种:“默认升序排序,blogid = 3时返回1,其它则返回2, 所以blogid = 3的记录排在最前啊。”

wildwave同学也给了个说法:“你将那个decode理解成前面select后面的列,依照那一列排序就好了。”

我又去试了一条语句,结果例如以下

SQL>  select * from tb order by decode(blogid,3,1,2);

BLOGID BLOGCLASS

---------- ------------------------------

         3 工作

         5 朋友

         1 人生

         2 学习

我如今的理解是这种,通过decode()函数,BLOGID值为3的那条记录被转换为了1,而其它的记录都是2,那么依照这个顺序排序,肯定BLOGID为3的那条记录永远在最前面了,不仅如此,注意到后面还加了个按BLOGID默认升序排列,这也就是说对于那些被DECODE转换为2的记录来说,依照它们的BLOGID升序排序

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wh62592855/archive/2009/11/15/4813404.aspx

order by使用方法的更多相关文章

  1. Oracle中UNION和ORDER BY共用方法

    问题 SQL语句中,UNION拼接两个单独的SQL时候,单独的SQL中加入ORDER BY会报错,ORDER BY只能放在句末. // 会报错的语句 SELECT S.S_ID AS ID,S.S_N ...

  2. SQL Server 分页方法汇总

    PageSize = 30 PageNumber = 201 方法一:(最常用的分页代码, top / not in) UserId UserId from UserInfo order by Use ...

  3. SQL2008-分页显示3种方法

    方法1: 适用于 SQL Server 2000/2005/2008 SELECT TOP 10 * FROM YieldRole WHERE id NOT IN ( SELECT TOP (10*( ...

  4. 【MySQL性能优化】改进MySQL Order By Rand()的低效率

    <a href="http://click.aliyun.com/m/9153/">点击查看原文</a> 正 文:   最近由于需要研究了一下MYSQL的随 ...

  5. sql server两种分页方法

    方法一: --分页方法一 OrderID,CustomerID, EmployeeID,OrderDate,ShippedDate,ShipName,ShipAddress,Freight from ...

  6. Oracle中打印99乘法表的13种方法

    --实现1: select r1 || '*' || r1 || '=' || r1 * r1 A, decode(r2, '', '', r2 || '*' || r1 || '=' || r2 * ...

  7. ThinkPHP 数据库操作(三) : 查询方法、查询语法、链式操作

    查询方法 条件查询方法 where 方法 可以使用 where 方法进行 AND 条件查询: Db::table('think_user') ->where('name','like','%th ...

  8. SQL Server 快速大数据排序方法

    SQL Server 中虽然有 ORDER BY NewID() 方法,但对于数据量比较大的结果集来说,排序那慢的可不是一星半点. 微软官方给了一种方案,https://msdn.microsoft. ...

  9. mvc area出现“找到多个与名为“Home”的控制器匹配的类型”错误的解决方法

    出现该问题的原因是在默认的Golbal.asax.cs文件中已经注册了默认路由 public class MvcApplication : System.Web.HttpApplication    ...

随机推荐

  1. .NET Framework 4.0 以上版本 下载地址

    https://msdn.microsoft.com/zh-cn/library/5a4x27ek(v=vs.110).aspx

  2. STL源代码剖析(一) - 内存分配

    Allocaor allocator 指的是空间配置器,用于分配内存.STL中默认使用SGI STL alloc作为STL的内存分配器,尽管未能符合标准规格,但效率上更好.SGI STL也定义有一个符 ...

  3. Guest与virtio netdev交互模式

    Qemu为virtio设备分配了专门的pci设备ID,device IDs (vendor ID 0x1AF4) from 0x1000 through 0x10FF,而pci子系统中的厂商ID和设备 ...

  4. POJ 3177 Redundant Paths - from lanshui_Yang

    Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...

  5. 玩转Web之JavaScript(四)-----javaScript语法总结(四) JS中的函数

    1.function/return   function用来定义函数(位于head部分),函数包含着一些代码,这些代码只能被事件激活,或者在函数被调用时才会执行.   return 用来从函数中返回值 ...

  6. 无需Visual Studio,5容易的 - 分为报告

    总报告设计,例如RDLC.水晶报表等.,需要安装Visual Studio.由VS提供报表设计界面设计报告,由VS设计报告.NET非常方便开发者,.但对于非开发,安装4G一个VS.并且需要Licens ...

  7. CreateEvent、SetEvent、ResetEvent和WaitForSingleObject

    事件对象就像一个开关:它仅仅有两种状态---开和关.当一个事件处于"开"状态.我们称其为"有信号".否则称为"无信号". 能够在一个线程的运 ...

  8. 懵懵懂懂初识J2EE

    一.定义 Java2平台包含:标准版.企业版.微缩版.当中J2SE是Java2的标准版,主要用 于桌面应用软件的编程:J2ME是微缩版,主要应用于嵌入式系统开发:还有这次学习的J2EE是Java2的企 ...

  9. Hybrid app 发展历程

    距离上一篇<基于微信 js-sdk 的简单应用>已经快一年了,说来真是惭愧.上次不久之后便换了工作,一直处于比较忙的状态.其次后面酣畅一段时间都没有从事移动相关的工作.直到今年3月份开始, ...

  10. 将android界面背景设置为黑色

    屏幕背景设置为黑色的几种方式: 新建项目时候 第二次next之后(不同sdk版本号可能不同),Background Color项点击可选. 开公布局文件,选择视图查看 就是下边二个选项卡中的第一个(G ...