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;
実行結果
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 |
注意点:
演算結果の単位(年間給与や総収入など)を明確にするため、列のエイリアスを使用しましょう。
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
コメント