Oracleデータベースで数値データを操作する際、算術演算子を正しく活用することは非常に重要です。本記事では、基本的な概念から実用例、さらに初心者がつまずきやすいポイントやトラブルシューティングまで、詳しく解説します。
なお、本記事ではSCOTTサンプルスキーマを使用した例で解説します。
SCOTTサンプルスキーマは以下を実行することでインポートおよび使用が可能です。
$ sqlplus / as sysdba
SQL> @?/rdbms/admin/utlsampl.sql
$ sqlplus scott/tiger
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
数値データ型とは?
数値データ型は、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;
実行結果
| ADDITION | SUBTRACTION | MULTIPLICATION | DIVISION |
|---|---|---|---|
| 120 | 80 | 200 | 50 |
scottスキーマを使用した実例:WHERE句での算術演算子活用
実際の業務で使用されるような具体的な例をscottスキーマで紹介します。
サンプルデータ
scottスキーマのEMP表を使用します。この表には以下のようなデータが格納されています。
SELECT EMPNO, ENAME, SAL, COMM FROM EMP;
| EMPNO | ENAME | SAL | COMM |
|---|---|---|---|
| 7369 | SMITH | 800 | NULL |
| 7499 | ALLEN | 1600 | 300 |
| 7521 | WARD | 1250 | 500 |
| 7566 | JONES | 2975 | NULL |
WHERE句で総収入を条件に検索する
例1: 基本給(SAL)に歩合(COMM)を加算した総収入が2000以上の従業員を検索
SELECT EMPNO, ENAME, SAL + NVL(COMM, 0) AS TOTAL_INCOME
FROM EMP
WHERE SAL + NVL(COMM, 0) >= 2000;
実行結果
| EMPNO | ENAME | TOTAL_INCOME |
|---|---|---|
| 7566 | JONES | 2975 |
ポイント:
NVL関数を使用して、COMMがNULLの場合に0を代入しています。これにより、NULLが計算を妨げないようにしています。
WHERE句で年間給与を条件に検索する
例2: 年間給与(SAL × 12)が30000以上の従業員を検索
SELECT EMPNO, ENAME, SAL * 12 AS ANNUAL_SALARY
FROM EMP
WHERE SAL * 12 >= 30000;
実行結果
| EMPNO | ENAME | ANNUAL_SALARY |
|---|---|---|
| 7566 | JONES | 35700 |
注意点:
演算結果の単位(年間給与や総収入など)を明確にするため、列のエイリアスを使用しましょう。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
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 |
練習問題と解答例
練習問題
- scottスキーマの
EMP表を使用し、総収入(SAL + COMM)が2500以上の従業員を検索するSQLを記述してください。 - 基本給(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




コメント