初めてのシステムと日記

システムも日記も初めてです。

ORDER BYでのnullの取扱

ひっかかったのでメモ。

ID  TEST
--  ----
 1   100
 2     3
 3  null
 4    40


SELECT * FROM table_name ORDER BY TEST ASC;

ID  TEST
--  ----
 2     3
 4    40
 1   100
 3  null     nullは末尾に配置


SELECT * FROM table_name ORDER BY TEST DESC;

ID  TEST
--  ----
 3  null     nullは先頭に配置
 1   100
 4    40
 2     3


OracleでNULL値を含む並び替えでは上記のようになる。

NULL値は、指定しなければ並び順では無限大と同じ振る舞いになるとのことです。


nullの並び順を指定したければ、下記のキーワードを使う。

SELECT * FROM table_name ORDER BY TEST ASC NULLS FIRST

ID  TEST
--  ----
 3  null
 2     3
 4    40
 1   100


SELECT * FROM table_name ORDER BY TEST DESC NULLS LAST

ID  TEST
--  ----
 1   100
 4    40
 2     3
 3  null

NULLS LAST  - 昇順のときのデフォルト
NULLS FIRST - 降順のときのデフォルト