11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQL の比較演算子 "<>" と "!=" の違いについて

Posted at

はじめに

SQL で一致しないというのを表すとき、どのような文を書くでしょうか?
私は <> を主に使って書くのですが、!= を使う人を見かけ、違いが気になったので少し調べてみました。

各 RDBMS の不等価演算子について

まずは身近な RDBMS のドキュメントを見てみます。

MySQL

<>!= が使えるようです。
ドキュメント上では <> が主に使われているようです。

PostgreSQL

こちらも <>!= が使えるようです。
また、興味深い注意書きもあります。

<> is the standard SQL notation for “not equal”. != is an alias, which is converted to <> at a very early stage of parsing. Hence, it is not possible to implement != and <> operators that do different things.

もうこれが、今回知りたかったことの答えなのですが、<> は標準の SQL の記法で、!= はエイリアスとのことです。
また、PostgreSQL ではパース時に !=<> に置き換える処理をしているようです。

SQLite

The not-equal operator can be either != or <>.

こちらも <>!= が使えるようです。

Oracle SQL

<>!= に加えて、^= も使えるようです。
ドキュメント上では != が主に使われているようです。(珍しいかも?)

前のバージョン (12.2) のドキュメントを見ると、logical_negation_symbol= と書いてあります。
つまり、¬= も不等価演算子として使えたみたいです。
あまりにも使われなかったので消したんでしょうか?変更理由は見つけられなかったです…

SQL Server

こちらも <>!= が使えるようです。
!= の方の説明では、

Not equal to (not ISO standard)

という記述がある通り、ISO 標準では存在しない演算子みたいです。

IBM Db2

<>!= に加えて、¬= も使えるようです。
先ほど見た通り、Oracle SQL でも使うことができた演算子です。
商用の RDBMS だと、ニッチな需要に応えてこういった演算子を追加することがあるんでしょうね…

ISO 標準における SQL の不等価演算子について

PostgreSQL や SQL Server のドキュメントでも言及されていた SQL の標準となるものを見てみます。

最新のを見ようと思ったのですが、ISO の Web Store などでしか買えるものしか見つからず、かなり高額なため断念…

1999年のものは、大学のサイトなどで見つけることができたので、そちらを参照することにします。

読み進めてみると、「5.2 <token> and <separator>」のところに以下のような記述があります。

<not equals operator> ::= <>

ということで、SQL 標準では <> のみが不等価演算子として定義されているようです。

まとめ

SQL 標準では <> のみが不等価演算子として定義されており、!= のようなそれ以外の演算子は RDBMS の独自拡張となっているようです。

各 RDBMS で使える不等価演算子についてもまとめておきます。

RDBMS 不等価演算子
MySQL <>, !=
PostgreSQL <>, !=
SQLite <>, !=
Oracle SQL <>, !=, ^=, (¬=)
SQL Server <>, !=
IBM Db2 <>, !=, ¬=

上記のように、!= に関しては基本的に対応されているようなので、<> を使うか、!= を使うかについては、コーディング規約等で定めてしまえば十分そうです。

11
4
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
11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?