1. 程式人生 > >Oracle 排序中使用nulls first 或者nulls last 語法

Oracle 排序中使用nulls first 或者nulls last 語法

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
--例項
1.order by col  (asc/desc)  NULLS LAST 不管col如何排序 col的null(空值) 總是在最後
SQL> WITH tab AS(
  2  SELECT 1 id,'小明' NAME,'開發中心' dept FROM dual
  3  UNION ALL
  4  SELECT 2,'小張','開發中心' FROM dual
  5  UNION ALL
  6  SELECT 3,'小王','開發中心' FROM dual
  7  UNION ALL
  8  SELECT 4,'小麗','研發中心' FROM dual
  9  )
 10  SELECT *
 11    FROM (
 12          SELECT ID, NAME, DEPT FROM tab
 13          UNION ALL
 14          SELECT NULL, DEPT, DEPT FROM tab GROUP BY DEPT
 15          )
 16   ORDER BY DEPT, ID NULLS LAST
 17  /
        ID NAME     DEPT
---------- -------- --------
         1 小明     開發中心
         2 小張     開發中心
         3 小王     開發中心
           開發中心 開發中心
         4 小麗     研發中心
           研發中心 研發中心
已選擇6行。
2.order by col  (asc/desc)  NULLS first 不管col如何排序 col的null(空值) 總是在最前
SQL> edi
已寫入 file afiedt.buf
  1  WITH tab AS(
  2  SELECT 1 id,'小明' NAME,'開發中心' dept FROM dual
  3  UNION ALL
  4  SELECT 2,'小張','開發中心' FROM dual
  5  UNION ALL
  6  SELECT 3,'小王','開發中心' FROM dual
  7  UNION ALL
  8  SELECT 4,'小麗','研發中心' FROM dual
  9  )
 10  SELECT *
 11    FROM (
 12          SELECT ID, NAME, DEPT FROM tab
 13          UNION ALL
 14          SELECT NULL, DEPT, DEPT FROM tab GROUP BY DEPT
 15          )
 16*  ORDER BY DEPT, ID NULLS first
SQL> /
        ID NAME     DEPT
---------- -------- --------
           開發中心 開發中心
         1 小明     開發中心
         2 小張     開發中心
         3 小王     開發中心
           研發中心 研發中心
         4 小麗     研發中心
已選擇6行。
目的:
本來的目的是把部門相同的人員歸在一起
SQL> edi
已寫入 file afiedt.buf
  1  WITH tab AS(
  2  SELECT 1 id,'小明' NAME,'開發中心' dept FROM dual
  3  UNION ALL
  4  SELECT 2,'小張','開發中心' FROM dual
  5  UNION ALL
  6  SELECT 3,'小王','開發中心' FROM dual
  7  UNION ALL
  8  SELECT 4,'小麗','研發中心' FROM dual
  9  )
 10  SELECT id||name
 11    FROM (
 12          SELECT ID, NAME, DEPT FROM tab
 13          UNION ALL
 14          SELECT NULL, DEPT, DEPT FROM tab GROUP BY DEPT
 15          )
 16*  ORDER BY DEPT, ID NULLS last
SQL> /
ID||NAME
------------------------------------------------
1小明
2小張
3小王
開發中心
4小麗
研發中心
已選擇6行。