Oracle では order by 句のデフォルト動作では、昇順 ( asc ) でソートした場合は null 値をもつレコードが最後尾に、降順 ( desc ) でソートした場合は、null 値を持つレコードは最初に取得されます。
スポンサーリンク
Oracle ではこの null 値のレコードの並び順を NULLS FIRST / NULLS LAST 構文によって制御することができます。
null 値のソート順を制御するサンプル SQL
-- 昇順でソートするが、null は最初に取得する select * from table order by col1 asc nulls first; -- 降順でソートするが、null は最後に取得する select * from table order by col1 desc nulls last;
Oracle のデフォルト動作
Oracle のデフォルトの解釈は以下のようになっているということがわかります。
-- 以下の sql は等価 select * from table order by col1 asc; select * from table order by col1 asc nulls last; -- 以下の sql は等価 select * from table order by col1 desc; select * from table order by col1 desc nulls first;
また、以下のように複数の条件を記述することもできますが、なんか長いです。
select * from table order by col1 asc nulls first, col2 desc nulls last;
参考
はじめて東京で電車に乗ったとき、見たときの衝撃は今でも忘れません。「長!」ただ、そう思うだけでした。