ProgrammingSQL開発者

NULLの処理がSQLでどのように機能するか説明してください。予期しないNULL値はどのように危険で、どのように正しく対処すべきか、典型的な間違いは何ですか?

Hintsage AIアシスタントで面接を突破

回答。

SQLにおけるNULL値は「不明」または「存在しない」値を示します。これは特別な振る舞いをします:

  • NULLを何らかの値と比較すると、=<>を使用しても常にUNKNOWNを返し、TRUEFALSEにはなりません。
  • NULLの存在を確認するには、IS NULLまたはIS NOT NULLを使用する必要があります。
  • NULLを含む任意の算術または論理演算はNULLを返します。

例:

SELECT * FROM users WHERE name = NULL; -- 行は返されません SELECT * FROM users WHERE name IS NULL; -- 正しい SELECT 1 + NULL; -- 結果:NULL

NULLを置き換えるには、COALESCE(foo, 0)(最初の非NULL値を取得)や、SQL ServerのISNULL(foo, 'default')のような関数を使用します。

ひっかけ問題。

質問: WHERE some_column <> 'value'という条件は、some_columnがNULLである行に対してどのような結果を返しますか?

回答:

これらの行では、条件が満たされません:NULLとの比較はUNKNOWNを返し、TRUEにはなりません。したがって、NULLを含む行は選択に含まれません。

例:

-- some_column | ... -- NULL | ... -- 'abc' | ... -- 'value' | ... SELECT * FROM table WHERE some_column <> 'value'; -- NULLを含む行は選択に含まれない

事例

銀行の報告書において、条件WHERE status <> 'closed'がstatus = NULLの口座(例えば、新しい申請)を考慮しなかったため、アクティブな口座の数が15%少なく計算されてしまった。

事例

メールパーソナライズサービスで、COALESCE(user_name, '親愛なる顧客')が配信に追加されていなかったため、ほぼ千人の顧客が名前なしで呼びかけを受け取り、自動化のミスと受け取られた。

事例

データベースの移行時に、LEFT JOINが予想以上の行を返してしまった。左のテーブルにNULLを持つフィールドが存在し、WHERE b.field = 'X'のフィルターがJOIN後にこれらの行を排除したため、一部のデータが失われてしまった。