SQLの比較演算子

WHEREで条件を指定する際に必要となる比較演算子について調べました〜。

 

比較演算子

SQLの比較演算子には以下のものがあります。

  • a = b  (a と b は等しい)
  • a <=> b  (a と b は等しい)
  • a != b  (a と b は等しくない)
  • a <> b  (a と b は等しくない)
  • a < b  (a は b よりも小さい)
  • a > b  (a は b よりも大きい)
  • a <= b  (a は b よりも小さいか等しい)
  • a >= b  (a は b よりも大きいか等しい)

 

だいたいRubyと同じですが、(a と b は等しい)(a と b は等しくない)という比較演算子が2つある。。。 

Rubyの<=>は大小比較して左辺のが大きかったらプラスを返して、左辺のが小さかったらマイナスを返して、等しかったら0を返す的なメソッドだった気がするので使い方がちょっと違いそう。。。

 

= と <=> 、!= と <> の違い

以下のようなeventsテーブルがあるとします。

id name date description
1 Whistler 1999-11-09 Went hiking.
2 Puffball NULL Chased
3 Bowser 1999-11-07 Go to park.
4 Momiji 2003-10-20 Came to the Hayashi family.
5 Buffy 2000-10-30 Climbed to the mountain.
6 jassmine 2005-10-10 Studied.

 

= の場合

= だとNULLと等しいかの比較ができないようでした。

SELECT * FROM events WHERE date = NULL;

何も取得できませんでした。

 

<=>の場合

<=> だとNULLと等しいか比較し、NULLであるレコードを返してくれました!

SELECT * FROM events WHERE date <=> NULL;

id name date description
2 Puffball 1999-11-08 Chased

 

!= の場合

SELECT * FROM events WHERE date != NULL;

何も取得できませんでした。

 

<> の場合

SELECT * FROM events WHERE date <> NULL;

こちらも何も取得できませんでした。。。

 

感想その他

= と <=> の違いは分かりましたが、!= と <> の違いがよく分かりませんw

記号による比較演算子以外にも比較できる構文があるようなので、後日調べていきます!