数値データと算術演算子ガイド

Oracle Master Silver

Oracleデータベースで数値データを操作する際、算術演算子を正しく活用することは非常に重要です。本記事では、基本的な概念から実用例、さらに初心者がつまずきやすいポイントやトラブルシューティングまで、詳しく解説します。


数値データ型とは?

数値データ型は、Oracleデータベースで数値を格納するための型です。特にNUMBER型が頻繁に使用されます。

NUMBER型の詳細

  • 特徴: 整数、小数、大きな値、小さな値を柔軟に格納可能。
  • 指定方法: NUMBER(p, s)
    • p(precision): 数字全体の桁数。
    • s(scale): 小数点以下の桁数。
  • :
    • NUMBER(10, 2) → 最大10桁、小数点以下2桁まで。

NUMBER型の例

以下のSQLは、NUMBER型を使用した表の作成例です。

CREATE TABLE sales (
id NUMBER(5), -- 最大5桁の整数
price NUMBER(10, 2) -- 最大10桁の数値で、小数点以下2桁まで
);

注意点

  • p(precision)を省略すると最大38桁まで格納可能。
  • s(scale)を省略すると小数点以下は無制限。

算術演算子とは?

算術演算子を使用すると、数値データを使った計算が可能です。

演算子用途
+加算10 + 5 → 15
-減算10 - 5 → 5
*乗算10 * 5 → 50
/除算10 / 5 → 2

実用例:算術演算子の基本操作

以下のSQL文は、算術演算子を使用した基本的な計算例です。

SELECT 100 + 20 AS addition,       -- 加算
100 - 20 AS subtraction, -- 減算
100 * 2 AS multiplication, -- 乗算
100 / 2 AS division -- 除算
FROM dual;

実行結果

ADDITIONSUBTRACTIONMULTIPLICATIONDIVISION
1208020050

scottスキーマを使用した実例:WHERE句での算術演算子活用

実際の業務で使用されるような具体的な例をscottスキーマで紹介します。

サンプルデータ

scottスキーマのEMP表を使用します。この表には以下のようなデータが格納されています。

SELECT EMPNO, ENAME, SAL, COMM FROM EMP;
EMPNOENAMESALCOMM
7369SMITH800NULL
7499ALLEN1600300
7521WARD1250500
7566JONES2975NULL

WHERE句で総収入を条件に検索する

例1: 基本給(SAL)に歩合(COMM)を加算した総収入が2000以上の従業員を検索

SELECT EMPNO, ENAME, SAL + NVL(COMM, 0) AS TOTAL_INCOME
FROM EMP
WHERE SAL + NVL(COMM, 0) >= 2000;

実行結果

EMPNOENAMETOTAL_INCOME
7566JONES2975

ポイント:
NVL関数を使用して、COMMがNULLの場合に0を代入しています。これにより、NULLが計算を妨げないようにしています。


WHERE句で年間給与を条件に検索する

例2: 年間給与(SAL × 12)が30000以上の従業員を検索

SELECT EMPNO, ENAME, SAL * 12 AS ANNUAL_SALARY
FROM EMP
WHERE SAL * 12 >= 30000;

実行結果

EMPNOENAMEANNUAL_SALARY
7566JONES35700

注意点:
演算結果の単位(年間給与や総収入など)を明確にするため、列のエイリアスを使用しましょう。


NULLとの計算とトラブルシューティング

NULLの性質

Oracleでは、NULLを含む計算は常に結果がNULLになります。

問題例

SELECT 100 + NULL AS result FROM dual;

結果

RESULT
NULL

解決策: NVL関数を使用

NULLを特定の値に置き換えるにはNVL関数を使用します。

SELECT 100 + NVL(NULL, 0) AS result FROM dual;

結果

RESULT
100

優先順位と括弧の活用

複雑な計算を行う際は、演算子の優先順位に注意が必要です。

優先順位演算子説明
1* /乗算・除算
2+ -加算・減算

優先順位の例

次のSQLを見てみましょう。

SELECT 100 + 20 * 2 AS result FROM dual;

結果

RESULT
140

括弧を使用して順序を変更

SELECT (100 + 20) * 2 AS result FROM dual;

結果

RESULT
240

練習問題と解答例

練習問題

  1. scottスキーマのEMP表を使用し、総収入(SAL + COMM)が2500以上の従業員を検索するSQLを記述してください。
  2. 基本給(SAL)が平均(AVG(SAL))以上の従業員を検索するSQLを記述してください。

解答例

SELECT EMPNO, ENAME, SAL + NVL(COMM, 0) AS TOTAL_INCOME
FROM EMP
WHERE SAL + NVL(COMM, 0) >= 2500;
SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE SAL >= (SELECT AVG(SAL) FROM EMP);

まとめ

  • WHERE句に算術演算子を活用することで柔軟な条件設定が可能。
  • NVL関数や括弧を使用してNULLや優先順位に対応。
  • 実用例を試しながらSQLの理解を深めましょう。


[参考]
Oracle Database SQL言語リファレンス 19c

コメント

タイトルとURLをコピーしました