- PR -

val != 1 という条件をつけたSQL文について

1
投稿者投稿内容
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2004-12-20 18:09
Windows 2000 + MySQL4.0.18でアプリケーションを作成しています。
SQL文で質問させてください。

以下のようなテーブルがあります。

create table test(
id integer,
val1 integer);

insert into test values (1, 1);
insert into test values (2, 2);
insert into test values (3, null);

で、次のようなSQL文を実行しました。

select * from test where val1 != 1;

この場合、得られるデータは、

id val1
2 2
3 null

だと思っていたのですが、実際に得られたデータは、

id val1
2 2

でした。これはSQLの仕様なのでしょうか?それともMySQLに
特化したものなのでしょうか?
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2004-12-20 18:32
引用:

でした。これはSQLの仕様なのでしょうか?
それともMySQLに特化したものなのでしょうか?


SQL の仕様です。null に対する演算が真になることはありません。null = null という比較でさえも True を返すことはないのです。null とは "1である" というわけでもく、"1でない" というわけでもなく、ただただヌル(未定義)なのです。ただし、一部のデータベースではオプションで null の振る舞いをビミョーに変えられるものがあります。

ちなみに、!= 演算子が使えるデータベースも多いですが、これは標準SQLではありません。通常は <> を使用します。
koji
大ベテラン
会議室デビュー日: 2002/12/25
投稿数: 100
投稿日時: 2004-12-20 18:45
未記入さん、ありがとうございます。
なるほど、仕様ですか。ただただヌル(未定義)なのですね。
となると強引に、
select * from test where val1 != 1 or val1 is null;
こんな風にしないといけないですね。

!=をあたりまえのように使ってましたが、標準では<>なのです
ね。非常に勉強になりました。ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)