SQLの比較演算子
唐突に、「プログラム言語を学んだ後でSQLを学ぶと、"not equal"を"!="と書きたくなる人が多いんじゃないか」、「SQLでは"<>"」と考えたところで、どこかの実装で"!="が使えたものがあったような記憶がよみがえってきた。
そこで、次の本を参照してみた。
- 作者: 山平耕作,土田正士,小寺孝
- 出版社/メーカー: 技術評論社
- 発売日: 2004/03
- メディア: 単行本
- この商品を含むブログ (5件) を見る
一方、別の本では‥
一晩で学ぶSQL―データベースの必須要素をかんたんにマスター
- 作者: ベンフォルタ,Ben Forta,篠原慶
- 出版社/メーカー: インプレス
- 発売日: 2000/08
- メディア: 単行本
- クリック: 1回
- この商品を含むブログ (2件) を見る
じゃあ、これらは実際にどれだけ使えるのかということで調べて表にしてみた。
使用したのは次のDBMS。(環境の再セットアップが面倒という理由から、ずっと昔にEpictetusを試したときに使用した環境を使用。そのためちょっと古いバージョンだったり、バージョン表記が大雑把だったりする)
- DB2 Express-C v9.5.2
- Oracle Database 10g Express Edition
- PostgreSQL v8.3
- MySQL v5.1
- Firebird v2.1
使用したのは次のSQL文。
CREATE TABLE hoge(val INT) ; INSERT INTO hoge(val) VALUES(1) ; INSERT INTO hoge(val) VALUES(2) ; INSERT INTO hoge(val) VALUES(3) ; INSERT INTO hoge(val) VALUES(4) ; INSERT INTO hoge(val) VALUES(5) ; INSERT INTO hoge(val) VALUES(6) ; INSERT INTO hoge(val) VALUES(7) ; INSERT INTO hoge(val) VALUES(8) ; INSERT INTO hoge(val) VALUES(9) ; SELECT val as v1 FROM hoge WHERE val = 5 ; SELECT val as v2 FROM hoge WHERE val >= 5 ; SELECT val as v3 FROM hoge WHERE val <= 5 ; SELECT val as v4 FROM hoge WHERE val > 5 ; SELECT val as v5 FROM hoge WHERE val < 5 ; SELECT val as v6 FROM hoge WHERE val <> 5 ; SELECT val as v7 FROM hoge WHERE val !> 5 ; SELECT val as v8 FROM hoge WHERE val !< 5 ; SELECT val as v9 FROM hoge WHERE val != 5 ; DROP TABLE hoge ;
(MySQL だけは、「val as v1」などと書くとエラーになるので、「val」のみに修正して実行)
で、結果。
= | >= | <= | > | < | <> | !> | ! | != | |
標準SQL | ○ | ○ | ○ | ○ | ○ | ○ | |||
DB2 v9.5 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
Oracle 10g XE | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ||
PostgreSQL v8.3 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ||
MySQL v5.1 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ||
Firebird v2.1 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○ |
意外にも、"!="は使えるDBMSが多い。
*1:と白々しいことを言ってみる