各データベース別のorder by実行時のNULLの扱い
新人の頃のメモ書きを見返していたら、Oracleでは NULL が常に最大値扱いとなるとあったので、他のDBについてどのような挙動になるか調べてみた。
- Oracle
- PostgreSQL
- MySQL
環境
$ mysql -V
mysql Ver 14.14 Distrib 5.6.13, for osx10.8 (x86_64) using EditLine wrapper
$ psql -V
psql (PostgreSQL) 9.3.1
調査
以下の様なテーブルとデータを作成してみた。
MySQL
create table mytable (
id int not null auto_increment primary key,
column1 text
);
INSERT INTO mytable ( column1 ) VALUES ( 'a' );
INSERT INTO mytable ( column1 ) VALUES ( 'b' );
INSERT INTO mytable ( column1 ) VALUES ( '1' );
INSERT INTO mytable ( column1 ) VALUES ( '2' );
INSERT INTO mytable ( column1 ) VALUES ( null );
PostgreSQL
create table mytable (
id serial not null primary key,
column1 text
);
INSERT INTO mytable ( column1 ) VALUES ( 'a' );
INSERT INTO mytable ( column1 ) VALUES ( 'b' );
INSERT INTO mytable ( column1 ) VALUES ( '1' );
INSERT INTO mytable ( column1 ) VALUES ( '2' );
INSERT INTO mytable ( column1 ) VALUES ( null );
それぞれソートしてみる。
MySQL
mysql> select * from mytable order by column1;
+----+---------+
| id | column1 |
+----+---------+
| 5 | NULL |
| 3 | 1 |
| 4 | 2 |
| 1 | a |
| 2 | b |
+----+---------+
5 rows in set (0.00 sec)
PostgreSQL
testdb=> select * from mytable order by column1;
id | column1
----+---------
3 | 1
4 | 2
1 | a
2 | b
5 |
(5 rows)
まとめ
DBごとに、ソート時の NULLの扱いが異なる 。
Oracleは試していないが、メモを見る限り PostgreSQLと同じ 。
MySQL | PostgreSQL | Oracle |
---|---|---|
最小 | 最大 | 最大 |
ディスカッション
コメント一覧
まだ、コメントがありません