コマンド道場
IS NULL難易度 ★★☆☆☆

部署が未定の社員を抽出する

部署が決まっていない(busho_id が入っていない)社員の氏名を、shain_id の小さい順に求めてください。列は「name」の 1 列にしてください。

主要 7 製品で通用 そのまま使える: PostgreSQL / MySQL / MariaDB / SQLite / SQL Server / Oracle Database / IBM Db2

製品ごとの対応表(実測)を見る

  • NULL は「値が無い」ことを表すので、= や <> では判定できません。IS NULL / IS NOT NULL を使います。
  • Oracle だけは長さ 0 の文字列(空文字)を NULL として扱うため、'' の扱いが他の製品と異なります。
  • NULL を別の値に置き換えるときは COALESCE を使います(NVL は Oracle 固有、IFNULL は MySQL 固有です)。
● 起動中…

この問題で使えるテーブル(名前をタップすると入力できます)

7

NULL
🔑int不可
text不可
int
データを見る(先頭 5 行)
busho_idbusho_nameparent_busho_id
1経営NULL
2開発1
3営業1
4管理1
5基盤2

18

NULL
🔑int不可
text不可
int
int
numeric(10,0)不可
date不可
date
データを見る(先頭 5 行)
shain_idnamebusho_idjoushi_idsalaryhired_ontaishoku_on
1鈴木1NULL9800002014-04-01NULL
2佐藤217200002016-10-01NULL
3田中225200002019-04-01NULL
4中村225300002020-04-01NULL
5小林224450502024-04-01NULL

解説

結論

NULL の判定は IS NULL を使います。

なぜ

SQL の比較は三値論理で、busho_id = NULL の結果は真でも偽でもなく「不明(UNKNOWN)」になります。WHERE 句は結果が真の行だけを通すため、不明の行は返りません。エラーにならず 0 行が返るだけなので、間違いに気づきにくいのが厄介な点です。

よくある間違い

WHERE busho_id = NULL と書いて「該当なし」と誤解する。実際にこの環境で試すとエラーにならず 0 行になることが確認できます。②NOT busho_id = 1 のように否定で書くと、busho_id が NULL の行は「不明」のままなので返りません。

IS NULL の使い方をはじめから読む

根拠(一次情報)