LoginSignup
0
1

More than 1 year has passed since last update.

SQLの比較演算子 '!=' の落とし穴に気をつけろ

Posted at

大した話ではないのですが、自分自身の意識に刻み込むために記録。

例えば下記のようなデータの場合。

テーブル名:employee

ID name department post
1 田中太郎 営業部 社長
2 山本大介   営業部 部長
3 岡本花子   営業部 null
4 鈴木裕太 システム部   係長
5 佐藤綾 システム部   null

このテーブルでpost(役職)が「社長」以外の従業員を取得したいなーと思った時に、
下記のSQLを実行すると、、

select * from employee
where post != '社長';

結果がこうなります。

ID name department post
2 山本大介   営業部 部長
4 鈴木裕太 システム部   係長

postがnull、つまり一般社員のレコードは取得されていません。

SQLのwhere文の比較演算式で!=を使用した場合は、nullは判定対象に含まれてないのです。

一般社員の方も出力したいならこう。

select * from employee
where post != '社長'
and post is null;

感覚的に書くとけっこう騙される部分(自分だけかもしれないですが…)
だと思うので初学者の方は気をつけましょう。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1