Oracle ORDER BYの条件でNULLの出力順を制御する方法

更新日: 公開日:2013/05/23
NULLデータの出力順

ORDER BY 句で昇順にすると、いつもNULLが後ろにくるのが嫌!
降順にすると、いつもNULLが先頭にくるのが嫌!

そんな思いをしている皆さん、実はNULLの表示順はSQLで制御できるのです。今回は ORDER BY 句における NULL 値の並び順の制御方法について説明します。

以下のようなデータを持つテーブル「T_NAME」があるとします。

サンプルテーブル: T_NAME

IDDATA_NAME
00001(null)
00002コジコジ
00003(null)
00004ジロー君
00005(null)
00006ジョニー
00007ハレハレ君

SQL の ORDER BY において、NULL 値は一番大きな値として扱われてしまうので、昇順の場合の表示順はいつも最後になってしまいます。

ここで、もしNULLを最初に出すようにしたい場合、どうすればいいのでしょうか?

NULLのソート順の定義でやりたいこと

  • NULL値のデータが先に表示するようにしたい
  • NULL以外のデータは昇順になるようにしたい

実はこの両方を満たす機能が存在します。「NULLを先に抽出します」と、ORDER BY 句の項目に定義することができるのです。説明するより見てもらった方が早いので、ご覧ください。

ORDER BY句でNULL値のデータを先に表示する方法

SELECT * FROM T_NAME
ORDER BY DATA_NAME NULLS FIRST, ID;
IDDATA_NAME
00001(null)
00003(null)
00005(null)
00002コジコジ
00004ジロー君
00006ジョニー
00007ハレハレ君

「NULLS FIRST」を ORDER BY 句のフィールド名の後ろにつけてあげれば、NULL が先頭になるようにソートしてくれます。ORDER BY 句のデフォルトは昇順なので「ASC」の定義は省略しましたが、省略しない場合の書き方はこちらになります。

SELECT * FROM T_NAME
ORDER BY DATA_NAME ASC NULLS FIRST, ID;

一方、降順でソートする場合、今度は逆に NULL が先に抽出されてしまうので、上記と同じように NULL 値を制御するコマンドを付け加えてあげることで、NULL 値のデータを後ろに持ってくることができるようになります。

ORDER BY句でNULL以外のデータを昇順にする方法

SELECT * FROM T_NAME
ORDER BY DATA_NAME DESC NULLS LAST, ID;
IDDATA_NAME
00007ハレハレ君
00006ジョニー
00004ジロー君
00002コジコジ
00001(null)
00003(null)
00005(null)

これでNULL値のデータがあっても、安心して思い通りのソート順に並べることができるようになります。「NULLS FIRST」「NULLS LAST」この2つは是非覚えておいてください。

\ この記事をシェアする /