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行。