溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Oracle order by子句對NULL的排序

發(fā)布時(shí)間:2020-08-11 22:09:55 來源:網(wǎng)絡(luò) 閱讀:2248 作者:hbxztc 欄目:關(guān)系型數(shù)據(jù)庫

我們都知道在Oracle SQL語句中order by 是用來排序查詢出來的結(jié)果集的,而在Oracle中NULL值是一個(gè)很特殊的值,如果order by指定的列有NULL值,那排序結(jié)果又是怎樣的呢。

下面做一組實(shí)驗(yàn)觀察一下order by時(shí)Oracle是怎么處理NULL的

版本11.2.0.4

1、創(chuàng)建測試表并插入測試數(shù)據(jù)

zx@ORCL>create table t (id number,name varchar2(10));

Table created.

zx@ORCL>insert into t values(1,'zx');

1 row created.

zx@ORCL>insert into t values(2,'wl');

1 row created.

zx@ORCL>insert into t values(3,'zxt');

1 row created.

zx@ORCL>insert into t values(4,NULL);

1 row created.

zx@ORCL>insert into t values(5,'yhz');

1 row created.

zx@ORCL>insert into t values(6,NULL);

1 row created.

zx@ORCL>commit;

Commit complete.

zx@ORCL>select * from t;

	ID NAME
---------- ------------------------------
	 1 zx
	 2 wl
	 3 zxt
	 4
	 5 yhz
	 6

6 rows selected.

2、測試order by

zx@ORCL>select * from t order by name asc;

	ID NAME
---------- ------------------------------
	 2 wl
	 5 yhz
	 1 zx
	 3 zxt
	 6
	 4

6 rows selected.

zx@ORCL>select * from t order by name desc;

	ID NAME
---------- ------------------------------
	 4
	 6
	 3 zxt
	 1 zx
	 5 yhz
	 2 wl

6 rows selected.

看到不同的排序方式,NULL值所排序的位置不同。升序(asc)NULL排在最后,降序(desc)NULL排在最前。

我們再來看看官方文檔是怎么描述的

ASC | DESC Specify the ordering sequence (ascending or descending). ASC is the default.

NULLS FIRST | NULLS LAST Specify whether returned rows containing nulls should appear first or last in the ordering sequence.

NULLS LAST is the default for ascending order, and NULLS FIRST is the default for descending order.

可以看到我們的實(shí)驗(yàn)結(jié)果與官方文檔描述是一致的。而且還可以使用NULLS FIRST|NULLS LAST來決定NULL的值是排在最前還是排在最后。

3、再次做實(shí)驗(yàn)驗(yàn)證

zx@ORCL>select * from t order by name asc nulls first;

	ID NAME
---------- ------------------------------
	 6
	 4
	 2 wl
	 5 yhz
	 1 zx
	 3 zxt

6 rows selected.

zx@ORCL>select * from t order by name asc nulls last;

	ID NAME
---------- ------------------------------
	 2 wl
	 5 yhz
	 1 zx
	 3 zxt
	 6
	 4

6 rows selected.

zx@ORCL>select * from t order by name desc nulls first;

	ID NAME
---------- ------------------------------
	 4
	 6
	 3 zxt
	 1 zx
	 5 yhz
	 2 wl

6 rows selected.

zx@ORCL>select * from t order by name desc nulls last;

	ID NAME
---------- ------------------------------
	 3 zxt
	 1 zx
	 5 yhz
	 2 wl
	 6
	 4

6 rows selected.

從結(jié)果可以看出使用NULLS FIRST|NULLS LAST可以直接控制NULL值在排序結(jié)果的首部還是尾部。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI