NULLを含んだデータの場合、ソート結果はどうなるでしょうか。
ソート結果を予想しながら読んでみてください。
サンプルデータ
次のテーブルを使用します。
-- 価格表を作成
create table prices (
id varchar2(3) not null,
name varchar2(20),
price number(5)
);
-- 初期データを投入
insert into prices values ('1','りんご',120);
insert into prices values ('2','苺',NULL);
insert into prices values ('3','柿',110);
insert into prices values ('4','梨',NULL);
insert into prices values ('5','バナナ',185);
id | name | price |
1 | りんご | 120 |
2 | 苺 | (NULL) |
3 | 柿 | 110 |
4 | 梨 | (NULL) |
5 | バナナ | 185 |
NULLデータを含むカラム[price]でソートしてみましょう。
昇順でソートした場合
select * from prices order by price asc;
id | name | price |
3 | 柿 | 110 |
1 | りんご | 120 |
5 | バナナ | 185 |
2 | 苺 | (NULL) |
4 | 梨 | (NULL) |
NULLは一番大きい値と見なされるため、後半に並びます。
NULLを最初に取り出したい場合は、次のようにします。
select * from prices order by price asc NULLS FIRST;
id | name | price |
4 | 梨 | (NULL) |
2 | 苺 | (NULL) |
3 | 柿 | 110 |
1 | りんご | 120 |
5 | バナナ | 185 |
降順でソートした場合
select * from prices order by price desc;
id | name | price |
2 | 苺 | (NULL) |
4 | 梨 | (NULL) |
5 | バナナ | 185 |
1 | りんご | 120 |
3 | 柿 | 110 |
NULLを最後に取り出したい場合は、次のようにします。
select * from prices order by price desc NULLS LAST;
id | name | price |
5 | バナナ | 185 |
1 | りんご | 120 |
3 | 柿 | 110 |
4 | 梨 | (NULL) |
2 | 苺 | (NULL) |
参考:実行環境
Oracle Database 19c
https://livesql.oracle.com
※オラクル社が公開しているWebアプリ。
OracleのSQLを実行可能で、無料!