NULLの扱いと三値論理とは?
NULLの扱いと三値論理とは、NULLは「値が未知・非適用」を表す標識で、0や空文字とは別物。NULLとの比較は真でも偽でもなくUNKNOWNとなり、SQLは真・偽・不明の三値論理で評価する。WHERE句はTRUEの行だけを返すため、UNKNOWNの行は結果から落ちる。
応用情報技術者試験の過去問では3回出題されています(2017年度〜2024年度)。
なるのあつかいとさんちろんり
NULLの扱いと三値論理の意味
NULLは「値が未知・非適用」を表す標識で、0や空文字とは別物。NULLとの比較は真でも偽でもなくUNKNOWNとなり、SQLは真・偽・不明の三値論理で評価する。WHERE句はTRUEの行だけを返すため、UNKNOWNの行は結果から落ちる。
NULLの扱いと三値論理の具体例
退職日がNULLの在職者を除きたくて「退職日 <> '2025-03-31'」と書くと、NULL行がUNKNOWNとなり結果から消えてしまう。意図どおりにするには「退職日 IS NULL OR 退職日 <> '2025-03-31'」またはCOALESCEで既定値に置き換える。
NULLの扱いと三値論理は試験でどう引っ掛けられる?
NULL = NULL は真ではなく不定で、比較演算子では決して真にならないためIS NULLを使う。NOT INの副問い合わせ結果にNULLが1つでも混ざると全体が不定になり、結果が0件になる典型的な罠がある。集約関数はCOUNT(*)を除きNULLを無視するため、COUNT(列)は全行数と一致せず、AVGの分母もNULL行を除いた件数になる。またNULL同士は=で等しくならないのに、GROUP BYでは同一グループにまとめられる、という不揃いも狙われる。
NULLの扱いと三値論理と関連する用語
NULLの扱いと三値論理が出た過去問
“部品”表のメーカコード列に対し,B+木インデックスを作成した。これによって,“部品”表の検索の性能改善が最も期待できる操作はどれか。ここで,部品及びメーカのデ…
正解:メーカコードの値が4001以上,4003以下の部品を検索する。
要点:B+木インデックスは範囲検索で最も効果を発揮する
B+木インデックスは値が大小順に並び、葉ノードが順につながっているため、ある範囲に含まれる値をまとめて取り出す範囲検索で効果が大きい。値の種類が多く均一に分散していれば、絞り込まれる行数も少なくて済む。
出典:平成29年度 春期 応用情報技術者試験 午前 問28(IPA)“部品”表のメーカコード列に対し,B+木インデックスを作成した。これによって,“部品”表の検索の性能改善が最も期待できる操作はどれか。ここで,部品及びメーカのデ…
正解:メーカコードの値が4001以上,4003以下の部品を検索する。
要点:B+木インデックスは絞り込みの効く範囲・等値検索で効果が大きい。
B+木インデックスは葉ノードがキー順に連結されているため、ある範囲に収まる値を探す検索や、特定の値に等しい行を探す検索で効率がよい。値の種類が多く均一に分散している状況で、限られた範囲だけを取り出す検索は、絞り込みが強く働くのでインデックスの効果が大きい。一方、否定条件のように表の大部分が該当する検索では、表全体を読むほうが速く、インデックスは活かせない。
出典:平成30年度 秋期 応用情報技術者試験 午前 問29(IPA)"部品"表及び"在庫"表に対し、SQL文を実行して結果を得た。SQL文のaに入れる字句はどれか。 〔SQL文〕 SELECT 部品.部品ID AS 部品ID, …
正解:COALESCE(SUM(在庫.在庫数), 0)
要点:複数行の在庫はSUMで集計しNULLはCOALESCEで0に置き換える
部品IDでグループ化しているので、同じ部品が複数倉庫にある場合は在庫数を合計して発注点と比べる必要がある。P01は90+90=180で発注点100を上回るため不要となり、SUMを使うのが正しい。さらに在庫表に行がないP03は外部結合の結果がNULLになるため、COALESCEで0に置き換えることで発注点100>0となり必要と判定できる。
出典:令和6年度 春期 応用情報技術者試験 午前 問26(IPA)
最終更新:2026-08-25/解説は資格暗記が独自に作成しています。 過去問の出典は各問題に記載のとおりです。