Lesson3 演算子


SQLではデータを表という形でとらえ、行/列という概念を使って演算を行います。では、どのようにこのような演算を行うのでしょうか。

ここではSQLにおいての行/列の演算方法について扱います。

3.1 SQLで演算
SQLで行/列を演算すると言っても、ほかの言語と比べて特に何かが違っているということはありません。SQLでも +, -, *, /, % などの算術演算が存在します。
では、簡単な例として次の文を考えてみましょう。

SELECT NO, ( NO + 1 ) NOONE FROM TABLE;

結果は次のようになります。

   NO NOONE
----- -----
1 2
2 3
3 4
4 5
8 9
15 16

結果を見て分かるように全ての行について、NO と NO + 1 された結果が出力されています。
( NO + 1 )の結果は別名として NOONE と定義されています。別名の指定の仕方は空白によって区切るだけです。データベース環境によっては明示的にASなどを指定する必要があるので注意してください。

また、このような演算を行っても実際の NO の値が変更されているわけではありません。NOONEとして定義された列はこのSQL文での列として仮に定義されたものです。実際は、単なる NO + 1 の値そのものですので、実データ NO には影響を与えません。
後の算術演算子 -, /, *, % も基本的な使い方は同じです。実際に試してみると良いでしょう。

3.2 SQL特有の演算
SQLには通常の算術演算や比較演算( >, <, = )などの他にもSQL特有の演算が存在します。まずは LIKE演算子を使った次の例題をご覧ください。

SELECT NO, CPU FROM TABLE WHERE CPU LIKE '%PENTIUM%';

結果は次のようになります。

   NO CPU
----- ---------------
1 PENTIUM100
8 MMX PENTIUM 166
15 PENTIUM II 400

LIKE演算子は与えられたパラメータに含まれる文字データが実際のデータに含まれているかを調べます。この例場合はワイルドカード %(パーセント)を使って、PENTIUMという文字列がCPU列の中のデータに含まれる行を探し出しています。%がPENTIUMという文字の先頭と最後に付けられていますので、この文字列を含むデータなら全てが抽出されます。
もし、'PENTIUM%' と LIKE のパラメータとして与えられていたのであれば、結果は NOが 1および 15 の行だけになります。

抽出する対象が文字データでなく数値データの場合はどうしたら良いでしょうか?

この場合は IN および BETWEEN 演算子を使用します。

例えば NO が 1 から 10 のものを抽出したいとします。この場合は次のようにします。

SELECT NO, CPU FROM TABLE WHERE NO BETWEEN 1 AND 10;

結果は次のようになります。

   NO CPU
----- ---------------
1 PENTIUM100
2 AMD K6-300
3 AMD K6-300
4 Intel DX4-100
8 MMX PENTIUM 166

NOが 1から 10 までのものだけが抽出されています。BETWEENは与えられたパラメータの範囲に存在するデータを抽出する場合に便利です。

IN演算子は指定した個々のパラメータに一致する行を抽出する演算子です。文字データでも数値データでも構いません。

例えば次の例を見てください。

SELECT NO, CPU FROM TABLE WHERE NO IN( 1, 10 );

結果は次のようになります。

   NO CPU
----- ---------------
1 PENTIUM100

今度はNOの値が 1の行のものだけ抽出されました。NOの値が10の行が存在しなかったのでこのような結果になったというわけです。


まとめ
SQLには通常のプログラミング言語と同じように柔軟で効果的なさまざまな演算子が存在します。これらは表における/列の演算方法を単純化し、またそれぞれが同じようなインターフェースで特に特別なことをすること無く実現しています。


本書での要点

  1. 演算子の優先順位
  2. 比較演算子
  3. NULLに関する説明と演算方法
  4. さまざまなワイルドカードと文字列連結演算子
  5. 論理演算(AND,OR,NOT)と集合演算(UNION)
  6. それぞれの演算子を使ったSQL文の例題


<戻る>