概要
NULLを含むデータをソートした場合、
デフォルトだとNULLは最小値より小さい値としてソートされる。
nulls first、もしくは
nulls last を使用することで、
NULLの位置をコントロールすることができる。
構文
NULL を最初に配置する。
order by column_name nulls first
NULL を最後に配置する。
order by column_name nulls last
実行例
環境
- Windows 10 64bit
- SQLite Command-Line Shell ver 3.50.4
| id | name |
|---|---|
| 0 | hoge1 |
| 1 | hoge2 |
| 2 |
昇順ソートでNULLの位置を調整する
nameカラムに対し、
- 何も指定しない場合
ascだけを指定した場合-
nulls firstを指定した場合、ascだけを指定した場合と同じ結果になる -
ascとnulls firstは一緒に指定することもできる(結果は同じ) -
nulls lastを指定した場合、 値が入っているレコードが先に来て、nullが最後に来る
sqlite> .nullvalue [null]
sqlite> .mode box
sqlite> -- 1.
sqlite> select * from user;
┌────┬────────┐
│ id │ name │
├────┼────────┤
│ 0 │ hoge1 │
│ 1 │ hoge2 │
│ 2 │ [null] │
└────┴────────┘
sqlite> -- 2.
sqlite> select * from user order by name asc;
┌────┬────────┐
│ id │ name │
├────┼────────┤
│ 2 │ [null] │
│ 0 │ hoge1 │
│ 1 │ hoge2 │
└────┴────────┘
sqlite> -- 3.
sqlite> select * from user order by name nulls first;
┌────┬────────┐
│ id │ name │
├────┼────────┤
│ 2 │ [null] │
│ 0 │ hoge1 │
│ 1 │ hoge2 │
└────┴────────┘
sqlite> -- 4.
sqlite> select * from user order by name asc nulls first;
┌────┬────────┐
│ id │ name │
├────┼────────┤
│ 2 │ [null] │
│ 0 │ hoge1 │
│ 1 │ hoge2 │
└────┴────────┘
sqlite> -- 5.
sqlite> select * from user order by name asc nulls last;
┌────┬────────┐
│ id │ name │
├────┼────────┤
│ 0 │ hoge1 │
│ 1 │ hoge2 │
│ 2 │ [null] │
└────┴────────┘
sqlite> select * from user order by name nulls last;
┌────┬────────┐
│ id │ name │
├────┼────────┤
│ 0 │ hoge1 │
│ 1 │ hoge2 │
│ 2 │ [null] │
└────┴────────┘
降順ソートでNULLの位置を調整する
nameカラムに対し、
descだけを指定した場合-
desc nulls firstを指定した場合、 値が入っているレコードが後に来て、nullが最初に来る -
desc nulls lastを指定した場合、descを単独で指定した場合と同じ結果になる
sqlite> -- 1.
sqlite> select * from user order by name desc;
┌────┬────────┐
│ id │ name │
├────┼────────┤
│ 1 │ hoge2 │
│ 0 │ hoge1 │
│ 2 │ [null] │
└────┴────────┘
sqlite> -- 2.
sqlite> select * from user order by name desc nulls first;
┌────┬────────┐
│ id │ name │
├────┼────────┤
│ 2 │ [null] │
│ 1 │ hoge2 │
│ 0 │ hoge1 │
└────┴────────┘
sqlite> -- 3.
sqlite> select * from user order by name desc nulls last;
┌────┬────────┐
│ id │ name │
├────┼────────┤
│ 1 │ hoge2 │
│ 0 │ hoge1 │
│ 2 │ [null] │
└────┴────────┘
参考URL
-
SQLite 公式サイト(英語)
https://www.sqlite.org/index.html -
SQLite ORDER BY に関するドキュメント
https://www.sqlite.org/syntax/ordering-term.html