VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
rental_rate * 1.1 の * です。このレッスンでは日常的に使う一式と、全員が
つまずく 1 つの振る舞い、つまり NULL が現れたときに何が起きるかを扱います。
始める前に mysql -u root -p sakila でクライアントを開いてください。
演算子の仕組み
LEFT_VALUE と RIGHT_VALUE を値に、OPERATOR を下の記号のいずれかに
置き換えます。値は列でもよく、リテラル、つまり文に直接書いた数値や
テキストでも構いません。
FROM のない SELECT は式を評価して 1 行を返すので、演算子を試す最も
手早い方法になります。
例
- 比較は 1 か 0 を返す
MySQL には独立したブール型がありません。成り立つ比較は整数の 1 を返し、
成り立たない比較は 0 を返します。TRUE と FALSE という語は、この 2 つの
整数の別表記です。
= 1 つであり、多くのプログラミング言語が使う == の 2 つ重ねでは
ありません。<> と != はどちらも「等しくない」を意味し、まったく同じに
振る舞います。このチュートリアルでは <> と書きます。
- 算術と、どの演算子がより強く結合するか
2 + 3 * 4 は 14 なので、乗算が先に行われました。括弧はそれを上書きして
20 にします。/ は 2 つの整数の間でも小数の結果を返し、DIV は小数部分を
捨て、% は余りを返します。
- DIV と % は除算と同じ強さで結合する
- が / より
強く結合するなら、最初の列は 8 ではなく 3 になるはずです。
- 演算子は列にも使える
リテラルにできることは、列にもできます。
NULL は NULL を含め何とも等しくない
NULL には、一度も記録されなかった値を示す印としてソートのレッスンで
出会いました。ここでは、どの実際の値とも違う振る舞いをします。
NULL = NULL は 1 でも 0 でもなく NULL を返します。
NULL <> NULL も同様です。例 1 のすべての演算子は、NULL に対してそのように
振る舞います。
<=> が例外です。2 つの値を比較して常に 1 か 0 を返し、決して NULL を
返さず、NULL を自分自身と等しいものとして扱います。
その帰結として、= NULL は決して何にも一致しません。値が存在しない行を
見つける必要があるときは、IS NULL がそのテストであり、
普通の比較と同じように 1 か 0 を返します。
まとめ
- 比較からは true や false ではなく
1か0が返ります。 - 等価には
=を、不等には<>を使います。 *、/、DIV、%は+と-より強く結合することを覚えておきます。- 整数除算には
DIVを、余りには%を使います。 NULLを含む普通の比較からはNULLが返るので、代わりに<=>かIS NULLを使います。
関連項目
- SELECT — これらの式を置く場所
- 列のエイリアス — 比較が生成する列に名前を付ける
- MySQL における NULL — 言語の他の部分での NULL の振る舞い