読者です 読者をやめる 読者になる 読者になる

HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

SQLの比較演算子

唐突に、「プログラム言語を学んだ後でSQLを学ぶと、"not equal"を"!="と書きたくなる人が多いんじゃないか」、「SQLでは"<>"」と考えたところで、どこかの実装で"!="が使えたものがあったような記憶がよみがえってきた。
そこで、次の本を参照してみた。

SQLスーパーテキスト

SQLスーパーテキスト

すると、比較演算子は"="、">="、"<="、">"、"<"、"<>"の6つだという。この本自体が「ISO SQL:1999の詳細解説」と謳っているので、SQLの標準規格に定められているのはこれらのみであろう*1
一方、別の本では‥
一晩で学ぶSQL―データベースの必須要素をかんたんにマスター

一晩で学ぶSQL―データベースの必須要素をかんたんにマスター

OracleSQL ServerAccessを中心に‥」という内容なのだが、比較演算子は"="、">="、"<="、">"、"<"、"<>"、"!>"、"!<"、"!="があり、ただ、すべてが使えるわけではないとの断り書きがある。
じゃあ、これらは実際にどれだけ使えるのかということで調べて表にしてみた。
使用したのは次のDBMS。(環境の再セットアップが面倒という理由から、ずっと昔にEpictetusを試したときに使用した環境を使用。そのためちょっと古いバージョンだったり、バージョン表記が大雑把だったりする)

使用したのは次の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:と白々しいことを言ってみる