各データベース別の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

PostgreSQL

それぞれソートしてみる。

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
最小 最大 最大

未分類

Posted by genzouw