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

2013/05/23

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

最新の更新情報は、Twitter、Facebook、Freedly にてお届け!

NJ-CLUCKER RSS

このブログの運営者

NJ

気力・体力勝負なシステム業界のエンジニアを経て、個人事業主として独立。Web サイト運営、動画制作など活動の場を広げています。

このブログでは、困ってたどり着いた人に、分かりやすく答えを提供できるように心掛けています。更新情報は、Twitter や Facebook ページを参照ください。フォローお待ちしています。

Facebook ページ NJ-CLUCKER
このブログが役に立ったら
「いいね!」お願いします

サイト内検索

最近のエントリー

どうぶつの森ポケットキャンプのダウンロード方法とインストール手順【初期設定】

どうぶつの森ポケットキャンプの配信開始も通信エラーが頻発!原因はアクセス過多か?!

WordPress でプラグインを利用せずメールフォームを自作!画面遷移せず非同期処理で実装

安室奈美恵 Finally 再録曲は完コピを超えた!もはやベストアルバムではなくニューアルバムだ!

iTunes で再生回数や最後に再生した日が更新されない場合の対処法

AbemaTV(アベマTV)をテレビ画面で見る方法!基本的にネット環境は必須!

Nintendo Switch 初期不良による問い合わせから修理までの流れ

Windows 10 起動時に Chrome が勝手に起動する原因は?急に起動するようになったのは OS の仕様変更によるもの

JavaScript の数値チェックに isNaN を使ってはいけない理由

Nintendo Switch のセーブデータを保持したまま本体を初期化する!本体の調子が悪い時の対処法の1つです!