SQLの演算子とは?
演算子とは、数値の計算や、比較などを行うときにしようする記号です。
SQLで使える演算子は、次のように分類されています。
- 数値の加減算などの計算を行うときに用いる「算術演算子」
- 値の一致や大小比較を行う「比較演算子」
- AND/ORなどのキーワードを用いて複数の条件の結果を判定する「論理演算子」
- ビットのシフト・演算などを行う「ビット演算子」
この記事では、SQLで演算子を使う方法について、解説していきます。
算術演算子
加算、減算、乗算、除算を行うときに使用する記号を「算術演算子」といいます。SQLで使用できる算術演算子は以下の通りです。
算術演算子 | 説明 |
---|---|
+ | 加算 |
– | 減算 |
* | 乗算 |
/ | 除算 |
算術演算子の使い方
SQLで加算、減算、乗算、除算を行うサンプルです。
算術演算子は、SQLやプログラミング言語などに限らず、一般的に用いられている記号で、SQLでも使い方は他と変わりません。
-- AとBを加算する
SELECT A + B;
-- AとBを減算する
SELECT A - B;
-- AとBを乗算する
SELECT A * B;
-- AとBを除算する
SELECT A / B;
比較演算子
比較演算子は、2つの値の関係を調べる時に用います。たとえば、AとBの値が同値であることを調べたり、数値や文字の大小関係を調べると言った時です。比較演算子は、比較の結果をTRUE(条件に一致)、FALSE(条件に不一致)で返します。
SQLで使用できる比較演算子は以下の通りです。
比較演算子 | 説明 |
---|---|
= | 2つの値が等しい |
!= または <> | 2つの値が等しくない |
< | 左辺の値が右辺の値より小さい |
> | 左辺の値が右辺の値より大きい |
<= | 左辺の値が右辺の値より小さいか等しい |
>= | 左辺の値が右辺の値より大きいか等しい |
IS NULL | NULL値であることを判定 |
IS NOT NULL | NULL以外の値であることを判定 |
LIKE | 部分一致 |
BETWEEN | 下限・上限の範囲内に収まっているか |
IN | いずれかの値と等しい |
NOT IN | いずれも等しくない |
比較演算子の具体的な使い方を見ていきましょう。
= 演算子
=演算子は、左右に指定した値が等しいかどうかを判定します。値が等しい場合はTRUE(0)、等しくない場合は(1)が結果として返ります。SQLのWHERE句に=演算子を使用すると、条件に一致するレコードのみを抽出できます。
SELECT AGE FROM USERS WHERE AGE = 100;
<実行結果>
AGE
-------------
100
100
!= または <> 演算子
!=と<>は、左右に指定した値が等しくないかを判定する演算子です。!=と<>はどちらを使用しても意味は同じです。
SELECT AGE FROM USERS WHERE AGE != 100;
<実行結果>
AGE
-------------
98
99
101
102
< 演算子
<演算子は、左辺の値が右辺の値より小さいかを判定します。
以下のサンプルSQLでは、<演算子を使って年齢が100歳未満のユーザーを検索しています。
SELECT AGE FROM USERS WHERE AGE < 100;
<実行結果>
AGE
-------------
98
99
> 演算子
>演算子は、左辺の値が右辺の値より大きいかを判定します。
以下のサンプルSQLでは、>演算子を使って年齢が100歳より上のユーザーを検索しています。
SELECT AGE FROM USERS WHERE AGE > 100;
<実行結果>
AGE
-------------
101
102
<= 演算子
<=演算子は、左辺の値が右辺の値より小さいか等しいかを判定します。
以下のサンプルSQLでは、<=演算子を使って年齢が100歳以下のユーザーを検索しています。
SELECT AGE FROM USERS WHERE AGE <= 100;
<実行結果>
AGE
-------------
98
99
100
>= 演算子
>=演算子は、左辺の値が右辺の値より大きいか等しいかを判定します。
以下のサンプルSQLでは、>=演算子を使って年齢が100歳以上のユーザーを検索しています。
SELECT AGE FROM USERS WHERE AGE >= 100;
<実行結果>
AGE
-------------
100
101
102
IS NULL演算子
IS NULL演算子は、指定した値がNULLであることを判定する時に使用します。
レコードの値がNULLのデータを抽出したりする時にIS NULL演算子を使用します。
以下のサンプルSQLでは、IS NULL演算子を使って、スコアがNULLのデータを検索しています。
SELECT NAME, SCORE FROM USERS WHERE SCORE IS NULL;
<実行結果>
NAME SCORE
----------------
YAMADA NULL
SUZUKI NULL
ITO NULL
SQL Server、PostgreSQLなどのデータベースでは、”(ブランク)は文字として扱われ、NULLと明確に区別されます。そのため、”(ブランク)のデータに対してIS NULL関数を実行すると、条件不一致となるため注意が必要です。
IS NOT NULL 演算子
IS NOT NULL演算子は、IS NULL演算子の逆で、指定した値がNULL以外であることを判定する時に使用します。
以下のサンプルSQLでは、IS NOT NULL演算子を使って、スコアがNULL以外のデータを検索しています。
SELECT NAME, SCORE FROM USERS WHERE SCORE IS NOT NULL;
<実行結果>
NAME SCORE
----------------
HAYASHI 100
KATO 90
YAMAMOTO 80
NULL値の判定にはIS NULLまたはIS NOT NULL関数を使用しましょう。
SQLのルール上、上記以外の比較演算子でNULL値と比較するものは、結果はすべてFALSEになる特性があります。
例えば 、1 != NULLのような比較式があった場合、一見すると条件に一致し、判定結果がTRUEになると思われますが、実際に実行してみると比較結果はFALSEになります。
SQLでNULLを比較する唯一の方法はIS NULLまたはIS NOT NULL関数を使用することです。ぜひ覚えておきましょう。
BETWEEN演算子
BETWEEN演算子は、指定した値が、下限・上限の範囲内に収まっているかを判定するときに使用します。
<判定する値または式> BETWEEN <上限> AND <下限>のようして記述します。
以下のサンプルSQLでは、BETWEEN演算子を使って、スコアが50〜80点のデータを検索しています。
SELECT NAME, SCORE FROM USERS WHERE SCORE BETWEEN 50 AND 80;
<実行結果>
NAME SCORE
----------------
HAYASHI 50
KATO 60
YAMAMOTO 80
IN 演算子
IN演算子は、指定した値がINの中に指定したリストのいずれかの値と等しいか判定します。
以下のサンプルSQLでは、IN演算子を使って、スコアが50点と80点のデータを検索しています。
SELECT SCORE FROM USERS WHERE SCORE IN( 50, 80 );
<実行結果>
NAME SCORE
----------------
HAYASHI 50
YAMAMOTO 80
NOT IN 演算子
NOT IN演算子は、IN演算子の逆で、指定した値がINの中に指定したリストのすべてに含まれていないか判定します。
以下のサンプルSQLでは、IN演算子を使って、スコアが50点と80点以外のデータを検索しています。
SELECT SCORE FROM USERS WHERE SCORE NOT IN( 50, 80 );
<実行結果>
NAME SCORE
----------------
KATO 60
SQLの演算子をマスター
SQLの「算術演算子」「比較演算子」について解説してきました。
別の記事では、AND/ORの「論理演算子」を使った複数条件のSQLを組み立てる方法も解説していますので、こちらもご覧ください。
算術演算子はすべて半角で書きましょう。また、徐余を求める算術演算子はSQLにないため、OracleデータベースなどであればMOD関数などを使って、徐余を求めます。