SQLでは、プログラミング言語で使えるのと同じような比較演算子が使えます。むしろ、列のデータをまとめて扱える分、SQLの方が解り易いかもしれません。ここでは、SQLで使える比較演算子の基本について解説します。
比較演算子の基本
プログラミング言語では、変数を比較し、その結果で処理を分岐する書き方がよく使われます。そして、そのような比較で使われることが多いのが、一致していることをチェックする等号「=」と、大小を比較する不等号の「>」や「<」です。
なお、これらの記号は比較演算子と呼ばれ、SQLでもよく使われます。まずは、この比較演算子の基本について解説します。
比較演算子とは
比較演算子は、変数と数値、または変数と別の変数などで大小関係や一致・不一致の関係を調べる記号のことです。先ほど取り上げた「=」、「>」、「<」が使われます。
SQLで使える比較演算子は次の通りです。
< 記号の左右を比較し、左側が小さければ条件に一致(例 1 記号の左右を比較し、左側が大きければ条件に一致(例 10 > 1)
<= 記号の左右を比較し、左右が等しいか左側が小さければ条件に一致(例 1 <= 1 または 1 = 記号の左右を比較し、左右が等しいか左側が大きければ条件に一致(例 1 >= 1 または 10 >= 1)
= 記号の左右が等しい場合に条件に一致
記号の左右が等しくない場合に条件に一致
なお、比較演算子がよく使われるのは、where句で条件を記述するケースですが、それ以外でもいろいろな使い方が可能です。
比較演算子は小学校で習う
ところで、比較演算子の「>」と「<」を何と呼ぶかご存じでしょうか。なお、「>」と「<」は、小学校で習います。そして、「>」は左辺が右辺より小さいことを示す記号で、「〜は〜より小さい」と読み、「<」は左辺が右辺より大きいことを示す記号で、「〜は〜より大きい」と読みます。
なお、比較する数値と一致している場合も含む以下と以上も、いっしょに習います。
プログラミング言語における呼び方
先ほど、比較演算子を読み方を説明しましたが、「>」や「<」の記号そのものを伝えるには不便です。そこでエンジニアは、よく「>」を小なり、また「<」を大なりと呼びます。
なお、記号には英語の呼び方があり、等号の「=」はイコール(equal)です。そのため、文書などでは、「>」はレスザン(less then)または略してLT、「<」はグレーターザン(greater then)または略してGTと書かれていることもあります。
同じように、以下の英語、less than and equalを略してLE、以上の英語、greater than and equalを略してGEです。
比較演算子の使い方
SQLでは、比較演算子を使った意味が通じる書き方であれば、全てのデータ型で使えます。また、SQLの文法に従ってさえいれば、使える場所の制限もありません。そして、比較演算子の結果は、trueまたはfalseを返すことから、where句で指定する条件や、case句で指定する条件など、SQLのどこででも使用可能です。
次から、比較演算子を使った例を紹介します。
比較演算子をwhen句の条件として指定する
SQLのQがクエリーつまり問い合わせを意味するように、SQLとは、データベースを検索して、条件に一致するデータを出力するために使われる言語と言えます。そして、SQLでその条件を設定するのがwhere句であり、条件を指定するために、where句に続けて比較演算子がよく使われます。
比較演算子を使った例 SELECT * FROM sample_table WHERE salary > 250000;
この例では、比較演算子の「>」を使い、「salary > 250000」の条件に一致するレコードを出力します。
比較演算子をcase句の条件として指定する
case句は、プログラム言語の「switch~case」のような、複数の条件に合わせて処理を分岐するための機能です。SQLでは、この条件を指定する際に、比較演算子が使えます。
case句を使った例 SELECT name, score, \ case when score >= 95 then "S" \ case when score >= 80 then "A" \ case when score >= 65 then "B" \ else "C" \ end as level \ * FROM score_table
この例では、csse句でscoreの値をチェックし、その数字に該当するlevelが出力されます。
複数の比較演算子を組み合わせるには
SQLのwhere句で条件を指定する場合、比較演算子を1つだけ使うケースは少なく、複数の比較演算子を組み合わせて条件を作るのが一般的です。そして、その場合、andやorなどの論理演算子もいっしょを使います。
次から、論理演算子と比較演算子の組み合わせ方について解説します。
比較演算子を組み合わせる使い方の基本
まず、比較演算子の結果は、条件に一致していればtrueであり、条件に一致しなければfalseです。それをwhere句に適用すると、trueの場合はクエリーを処理し、falseの場合はクエリーを処理しません。
そして、論理演算子、つまりandやorは、tureまたfalseの組み合わせから、tureまたfalseを出力するので、where句でも使えます。
論理演算子と比較演算子の組み合わせの例 where ( salary > 250000 ) and ( salary < 300000 )
この例では、( salary > 250000 )がtrueで、さらに、( salary < 300000 )もtrueの場合、true and trueであり、where句はtrueとなり、クエリーを処理します。また、それ以外の条件の場合は、クエリーを処理しません。
論理演算子は複数組み合わせる
先ほど、論理演算子のandを使い、2つの比較演算子の結果の両方がtrueなら、クエリーを処理し、falseなら処理しないと解説しましたが、論理演算子は、複数設定することが可能です。
複数の比較演算子を組み合わせた例 where ( ( salary > 250000 ) and ( salary 25 ) and ( age <= 30 ) )
この例では、2つの比較演算子を組み合わせたsalaryの条件の結果と、ageの条件の結果を、論理演算子andで計算結果がtrueなら、クエリーを処理します。
between構文で比較する
2つの値の範囲に含まれるかをチェックする場合、比較演算子を使う代わりに、between構文が使えます。なお、between構文は、比較演算子の「>」と「<」を組み合わせたケースと同じです。
between構文の基本
列名の数が値1以上、かつ、値2以下に一致する場合はtrueを返し、一致しなかった場合はfalseを返す。
where 列名 between 値1 and 値2
なお、between構文を比較演算子で書き換えると、次のようになります。
where 列名 >= 値1 and 列名 <= 値2
比較演算子が使えないケース
データベースに格納したデータに対し、比較演算子を使ったSQLで抽出しようとしても、できないデータがあります。そして、その原因は、データがまだ格納されていない状態です。なお、このような状態をSQLで検索すると、nullとして表示されます。このnullには比較演算子が適用できません。nullを判定するには、専用の演算子が必要です。
nullを判定する演算子is null
SQLでは、データが格納されていない状態であるnullを判定するには、専用の演算子is nullを使います。なお、is nullは、チェックした要素がnullなら真を、nullでなければ偽を返す演算子です。そして、これまで解説した比較演算子と同じ使い方が可能です。
そして、nullを表示したくない場合は、nullかどうかを判定し、nullの場合に文字列に置き換えるcoalesce関数も使われます。この関数の使い方は、下の例を参考にしてください。
id null を使ったSQLの例 SELECT name, ¥ coalesce(score, "未登録"), \ case when score is null then "未登録" \ case when score >= 95 then "S" \ case when score >= 80 then "A" \ case when score >= 65 then "B" \ else "C" \ end as level \ * FROM score_table
まとめ
繰り返しになりますが、SQLは、select文のwhere句で条件を指定し、それに一致するデータを抽出して出力するための言語と言ってもいいくらいです。そのため、条件を記述するのに使われる比較演算子は、SQLでよく使われています。ただし、実際のSQLは、論理演算子で複数の条件を組み合わせるなど、簡単ではありません。複雑な比較演算子の使い方をマスターし、スキルアップを目指しましょう。
比較演算子の結果がtrueまたはfalseとなることから、論理演算子のnotを組み合わせて結果を反転させ、それを論理演算子で計算させることもできます。しかし、比較演算子の結果と組み合わせる場合は、比較演算子の別の使い方で実現できます。ぜひ、検討してみてください。