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

2016/06/30

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つは是非覚えておいてください。

minecraft-kuda-shaders01
2016/12/03

Minecraft 低スペックパソコンで使える影 MOD の代表格 KUDA SHADERS の導入方法

odaiba-gundam-last-day01
2016/12/02

お台場のガンダムいつまで見られるか?!ダイバーシティーからの撤去が決まる

new-year-2017
2016/12/01

一人用おせち料理のすすめ【2017】人気店のおせちが通販で手に入ります

jayfi-touch-h1-ja-22-01
2016/11/30

イヤホンからの乗り換えにおすすめ Jayfi Touch H1 はスマホの通話機能を持つ低音重視のワイヤレス Bluetooth ヘッドホン【レビュー】

android-smartphone-case01
2016/11/30

Android 用スマホケースはどこで売っている?店に行っても売ってない場合どうすれば良いか

remove-crc-sha-from-context-menu01
2016/11/29

ファイルを右クリックすると表示される CRC SHA を消す方法

rakusuru01
2016/11/29

ラクスルで初めてのポスター発注!時間は掛かるが料金は安い!

file-archiver-7-zip01
2016/11/29

ZIP より圧縮率の高いアーカイバー 7-Zip を今更ながら紹介する

install-minecraft-mod-optifine01
2016/11/29

Minecraft 軽量化 MOD OptiFine の導入方法 【1.11対応済み】

minecraft02
2016/11/28

Minecraft のビデオ設定を変更して軽くすれば低スペックパソコンでも十分に遊べる

→もっと見る

Name :
気力/体力勝負なシステム業界で揉まれています。自分が自分らしくあるために、大事なリセット、スタートします。

プロフィール詳細 Twitter @_NJ69_
Facebook ページ nj-clucker.com シェア
このブログが役に立ったら
「いいね!」お願いします
PAGE TOP ↑