1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQL: NULL

1
Posted at

今回はPostgreSQLのNULLを学びます。取得したデータの意味を整理します。

所要時間は15分ほどです。
それでは、さっそく始めていきましょう!

今日のテーマと到達目標

NULLは、値がないことを表します。ゼロや空文字列、文字列の「NULL」と区別できることが今回の目標です。

記述 意味
NULL 値がないことを表す
0 数値のゼロ
'' 長さ0の文字列
'NULL' NULLという4文字の文字列

NULLだけから、値が不明なのか、未入力なのか、その項目が該当しないのかを決めることはできません。データの定義や運用上のルールと合わせて読む必要があります。

施設データでNULLの表示を確認する

取得元はmobility.poisです。1行が1施設を表し、poi_idは施設ID、poi_nameは施設名、opened_dateは開業日、closed_dateは閉業日を表す列です。

次のSQLを実行しました。

SELECT poi_id, poi_name, opened_date, closed_date
FROM mobility.pois
ORDER BY poi_id
LIMIT 10;

実行画面では、施設IDが1から10までの10行が表示され、いずれもclosed_dateが[NULL]と表示されました。

これは今回表示した10行について確認できたことです。テーブル全体の閉業日がすべてNULLであると確認したわけではありません。また、閉業日のNULLだけで営業中と断定することもできません。

表示用の文字と保存された値を区別する

psqlでは、NULLを表示する際に使う文字を設定できます。

\pset null '[NULL]'

この設定は、NULLを画面上で見分けやすくするためのものです。保存された値を文字列の[NULL]へ書き換える操作ではありません。

今回の画面には[NULL]が表示されていました。「文字列が保存されているという意味か」という確認には、「そのような意味ではないです」と回答しました。

画面に見える文字と、データベースが扱っている値を区別することが大切です。

NULL・ゼロ・空文字列・文字列NULLを並べる

次に、4種類を同じ結果に並べて表示しました。

SELECT
    NULL AS missing_value,
    0 AS zero_value,
    '' AS empty_text,
    'NULL' AS text_value;

このSQLではテーブルを取得元にせず、直接記述した値などを表示しています。ASの後ろは、結果の列に付ける名前です。

実行結果は次の1行でした。

 missing_value | zero_value | empty_text | text_value
---------------+------------+------------+-----------
 [NULL]        |          0 |            | NULL

missing_valueにはNULLの表示設定である[NULL]が出ています。zero_valueには数値の0が出ています。empty_textは長さ0の文字列なので、表示する文字がありません。text_valueには文字列としてNULLの4文字が出ています。

引用符の有無を確認する

次の2つは別の意味です。

NULL
'NULL'

引用符のないNULLは値がないことを表します。一方、単一引用符で囲んだ'NULL'は文字列です。今回の結果では、表示設定のおかげで前者が[NULL]、後者がNULLと見分けられました。

また、空文字列は引用符の間に文字を入れず、''と書きます。スペースを入れた' 'は1文字の文字列なので、空文字列とも異なります。

確認問題と回答

「NULLと空文字列は同じものか」という確認に対して、「違うものです」と回答しました。

空文字列には長さ0の文字列という値があります。NULLは値がないことを表すため、同じものとして扱いません。数値の0も、値がない状態ではありません。

今回のSELECTは表示を確認する操作であり、施設データの更新は行っていません。

合格条件と学習記録

確認項目 確認できた内容
施設データのNULL表示を確認する 先頭10行のclosed_dateに[NULL]を確認
表示設定と保存された値を区別する [NULL]という文字列の保存を意味しないと回答
4種類を並べて表示する NULL・0・空文字列・文字列NULLをSELECTで確認
NULLと空文字列を区別する 「違うものです」と回答

まとめ

NULL、0、空文字列、文字列のNULLは、それぞれ異なります。画面の見た目だけで判断せず、SQLの記述と表示設定を合わせて確認します。

NULLの業務上の意味は、列の定義やデータのルールで確かめます。今回確認したのは、NULLの基本的な意味と、ほかの値との違いです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?