• ベストアンサー

ACCESS:Nullの扱い

次のようなSQLがあります。 SELECT 住所.住所, 住所.備考 FROM 住所 WHERE (((住所.住所) Not Like "*佐賀県*")); 住所のフィールドにNullがありますが抽出されません。 WHERE (((住所.住所) Not Like "*佐賀県*")) OR (((住所.住所) Is Null)); とすると思い通りの結果になるのですが、なぜNullは「"佐賀県"を含まない」には含まれないのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>なぜNullは「"佐賀県"を含まない」には含まれないのでしょうか。 通常「佐賀県を含まない」は「佐賀県を含まない、Nullでない有効なデータ」を意味します。 何故なら「佐賀県を含む」は「佐賀県を含む、Nullでない有効なデータ」を意味するからです。 プログラミング初心者がつまづく「0とnull」の違いを分かりやすく説明した画像がこちらです https://togetter.com/li/1083212 上記の例で言えば「佐賀県を含まない」は「ペーパーフォルダーにトイレットペーパーが装着されているが、そのトイレットペーパーはネピアじゃない」になりますし「佐賀県を含む」は「ペーパーフォルダーにトイレットペーパーが装着されているが、そのトイレットペーパーはネピア」になります。一方「Nullの物を含む」は「ペーパーフォルダーにトイレットペーパーが装着されていない」になります。 「佐賀県を含む」は、言い換えれば「ネピアのトイレットペーパーが装着されている」です。 その逆の「佐賀県を含まない」は「ネピアのトイレットペーパーが装着されていない」ではなく「ネピアじゃないトイレットペーパーが装着されている」になります。 どちらも「ともかく、何らかのトイレットペーパーが装着されていること」が前提になります。つまり、どちらの場合も「Nullじゃない」のが前提です。 「ネピアのトイレットペーパーが装着されていない」を検索する場合は「ネピアじゃないトイレットペーパーが装着されているか、または、トイレットペーパーが装着されていない状態」を検索しないとなりません。 つまり WHERE (((住所.住所) Not Like "*佐賀県*")) OR (((住所.住所) Is Null)); じゃないといけないのです。

ticktak
質問者

お礼

とてもわかりやすい解説大変ありがとうございました。

その他の回答 (1)

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.2

タイトルに佐賀県を含まない事ですから、タイトルがあることが前提ですよね。別にSQLでなくても文章的にもそういう意味だとおもいますが?