ORDER BY 句難易度 ★★★☆☆
未登録を最後に並べる
kokyaku テーブルから、顧客名(kokyaku_name)と都道府県(pref)を取り出し、都道府県の昇順に並べてください。ただし都道府県が未登録(NULL)の顧客は最後に置いてください。都道府県が同じ場合は kokyaku_id の小さい順とします。列は「kokyaku_name, pref」の順にしてください。
この書き方が使えない製品があります そのまま使える: PostgreSQL / SQLite / Oracle Database / IBM Db2
- MySQL では使えません(ORDER BY ... NULLS LAST)
- MariaDB では使えません(ORDER BY ... NULLS LAST)
- SQL Server では使えません(ORDER BY ... NULLS LAST)
- PostgreSQL では昇順のとき NULL が最後に来ますが、これは製品によって違います。位置を決めたいなら明示してください。
- ORDER BY ... NULLS LAST が使えない製品(MySQL・MariaDB・SQL Server)では、並べ替えのキーに (pref IS NULL) を足して代用します。
● 起動中…
この問題で使えるテーブル(名前をタップすると入力できます)
10 行
| 列 | 型 | NULL |
|---|---|---|
| 🔑 | int | 不可 |
| int | 不可 | |
| date | 不可 | |
| text | 不可 |
データを見る(先頭 5 行)
| juchu_id | kokyaku_id | juchu_on | status |
|---|---|---|---|
| 1001 | 1 | 2025-11-05 | done |
| 1002 | 2 | 2025-11-18 | done |
| 1003 | 1 | 2025-12-02 | done |
| 1004 | 3 | 2025-12-09 | cancel |
| 1005 | 4 | 2025-12-24 | done |
17 行
| 列 | 型 | NULL |
|---|---|---|
| 🔑 | int | 不可 |
| 🔑 | int | 不可 |
| int | 不可 | |
| int | 不可 | |
| numeric(10,0) | 不可 |
データを見る(先頭 5 行)
| juchu_id | gyo_no | shohin_id | suryo | tanka |
|---|---|---|---|---|
| 1001 | 1 | 1 | 20 | 180 |
| 1001 | 2 | 2 | 30 | 120 |
| 1002 | 1 | 4 | 2 | 23800 |
| 1002 | 2 | 5 | 1 | 18500 |
| 1003 | 1 | 6 | 4 | 4200 |
5 行
| 列 | 型 | NULL |
|---|---|---|
| 🔑 | int | 不可 |
| text | 不可 | |
| text | 可 | |
| date | 不可 |
データを見る(先頭 5 行)
| kokyaku_id | kokyaku_name | pref | created_on |
|---|---|---|---|
| 1 | 青葉工業 | 東京都 | 2024-05-10 |
| 2 | 白樺物産 | 大阪府 | 2024-08-01 |
| 3 | 黒松システム | 東京都 | 2025-01-15 |
| 4 | 赤坂商会 | NULL | 2025-03-20 |
| 5 | 三田商事 | 愛知県 | 2025-06-01 |
7 行
| 列 | 型 | NULL |
|---|---|---|
| 🔑 | int | 不可 |
| text | 不可 | |
| text | 不可 | |
| numeric(10,0) | 不可 |
データを見る(先頭 5 行)
| shohin_id | shohin_name | category | price |
|---|---|---|---|
| 1 | ノート | 文具 | 180 |
| 2 | ボールペン | 文具 | 120 |
| 3 | 付箋 | 文具 | 250 |
| 4 | デスクチェア | 家具 | 24800 |
| 5 | 書棚 | 家具 | 18500 |
解説
結論
NULL を先頭と末尾のどちらに置くかは、明示しないと製品任せになります。
なぜ
NULL は「値が無い」ことを表すので、他の値との大小が決まりません。そのため「NULL をどこに置くか」は SQL の規格ではなく各製品の既定に委ねられています。PostgreSQL の既定は昇順で最後、降順で最初です。MySQL は逆に昇順で最初に来ます。
同じ SQL が製品によって違う順番を返すのは、エラーにならないぶん厄介です。順番が意味を持つなら NULLS LAST のように明示してください。
よくある間違い
①既定の位置を覚えたつもりで別製品に持っていって順番が変わる ②並べ替えのキーを 1 つしか指定せず、同じ値の行の順番が不定になる。
根拠(一次情報)
- PostgreSQL 18 マニュアル: 行の並べ替え一次情報・確認 2026-08-01