[ Oracle ] NULLを条件検索するときの罠(IS NULL または IS NOT NULL が必要)

Pocket

自分の感覚で Oracle を条件検索したときに遭遇した罠のお話です。おそらくは、同様の状況になったこともあるとは思うのですが、記憶は全くありません。(はっ、もしや、バグが混入したまま動いてるのでしょうか?というよりも、バグのないシステムなどありません)

スポンサーリンク

値が NULL でもレコードが期待通りに抽出できると思っていたSQL

次のような酔っ払いテーブルがあったとします。

名前 年齢 性格
吉幾三 64 エロい!
まさお  (NULL) 性格もイケメン
ゆきこ 55 暴力ゴリラ

次のSQLでは、まさおのレコードは抽出できません。決してブログ内で年齢を18歳と偽っている(非公表)から取得できないわけではありません。Oracle には、今はまだ人工知能は装備されていないと思いますので、命令通りに動作します。人工知能が搭載されると年齢を探り当てて取得できるようになることでしょう。

なお、まさおはゆきこに、また殴られるかもしれません。

-- 100歳以外の酔っ払いを取得する
select  まさお from 酔っ払い where 年齢 <> 100

NULL も抽出する

値が NULL の場合でも抽出するようにするには、次のように記述します。

-- 100歳以外の酔っ払いを取得する(年齢非公表も取得する)
select  まさお from 酔っ払い where 年齢 IS NULL or 年齢 <> 100

データベースが人工知能を持ったら

よくよく考えると、データベースが人工知能を持つとデータがネット上のコンテンツの場合はグーグルになっちゃいますね。グーグルもうかうかしてられません。

しかし、今は人工知能(AI)分野でも、グーグルが全力で先頭足ってる印象を受けますので、むしろ差は開くばかりなのかもしれないです。

orz やはり記憶力がない

ここまで書いて、絶対に同じような内容のページあるだろうと思い探してみたら出てきました。折角なのでこのページの内容も残しておきます。リンク先の投稿日時が比較的最近なのは、前サイトの内容を移転させたためです。おそらく、5年位前(適当、あてにならない)の内容です。

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *