Oracle初心者向け:WHERE句を徹底解説!

Oracle Master Silver

SQLでデータを抽出する際に欠かせないのがWHERE句です。条件に基づいて必要なデータだけを取得することで、効率的なデータ管理が可能になります。本記事では、WHERE句の基本から応用、さらにはパフォーマンスの改善方法までを詳しく解説します。


1. WHERE句とは?

WHERE句は、SQLのSELECT文において、条件を指定するために使用します。この条件によって、必要なデータのみを効率よく抽出することが可能になります。

基本構文は以下の通りです:

SELECT 列名1, 列名2, ...
FROM テーブル名
WHERE 条件;

使用例:

以下のクエリは、給与(SAL)が3000を超える従業員を抽出します。

SELECT empno, ename, sal
FROM emp
WHERE sal > 3000;

結果:

EMPNOENAMESAL
7566JONES2975
7698BLAKE2850

2. 基本的な演算子を使った条件指定

WHERE句で使用できる基本的な演算子を以下にまとめます。

演算子説明使用例
=等しいsal = 3000
!= または <>等しくないsal <> 3000
>より大きいsal > 3000
<より小さいsal < 3000
>=以上sal >= 3000
<=以下sal <= 3000

実践例:

給与が2500以上3000以下の従業員を抽出するクエリ:

SELECT empno, ename, sal
FROM emp
WHERE sal BETWEEN 2500 AND 3000;

3. 複数条件を組み合わせる方法

複数の条件を指定する場合は、論理演算子を使用します。

論理演算子説明使用例
ANDすべての条件を満たすsal > 2000 AND deptno = 10
ORいずれかの条件を満たすsal > 2000 OR deptno = 20
NOT条件を満たさないNOT (deptno = 10)

実践例:

部門番号が10または20で、給与が2500以上の従業員を取得:

SELECT empno, ename, deptno, sal
FROM emp
WHERE (deptno = 10 OR deptno = 20) AND sal >= 2500;

4. 特殊条件の指定方法

NULL値の確認

NULL値はIS NULLまたはIS NOT NULLで確認します。

SELECT empno, ename, comm
FROM emp
WHERE comm IS NULL;

LIKE演算子を使ったパターンマッチング

LIKE演算子とワイルドカードを使用することで、部分一致検索が可能です。

ワイルドカード説明
%任意の文字列(0文字以上)
_任意の1文字

実践例:

名前が「S」で始まる従業員を取得:

SELECT empno, ename
FROM emp
WHERE ename LIKE 'S%';

IN演算子で複数の値を指定

複数の値を簡潔に指定するには、IN演算子を使用します。

SELECT empno, ename, deptno
FROM emp
WHERE deptno IN (10, 20, 30);

BETWEEN演算子で範囲指定

範囲を指定する場合は、BETWEENを使用します。

SELECT empno, ename, sal
FROM emp
WHERE sal BETWEEN 2000 AND 3000;

5. 実践例:よくある利用シナリオ

日付データを条件に指定

OracleのDATE型を使った日付条件の指定方法:

SELECT empno, ename, hiredate
FROM emp
WHERE hiredate BETWEEN TO_DATE('1981-01-01', 'YYYY-MM-DD')
AND TO_DATE('1982-12-31', 'YYYY-MM-DD');

サブクエリとの組み合わせ

サブクエリを使用して、他のテーブルのデータを条件に含めます。

SELECT empno, ename, sal
FROM emp
WHERE deptno = (
SELECT deptno
FROM dept
WHERE dname = 'SALES'
);

6. パフォーマンスを意識したWHERE句の書き方

WHERE句を効率的に書くことで、クエリの速度を改善できます。

1. インデックスを活用する

インデックスが設定されている列を条件に指定することで、検索速度が向上します。

2. 計算式を避ける

条件内で列に計算式を適用すると、インデックスが利用されない可能性があります。

悪い例:

WHERE TO_CHAR(hiredate, 'YYYY') = '1982';

良い例:

WHERE hiredate BETWEEN TO_DATE('1982-01-01', 'YYYY-MM-DD') 
AND TO_DATE('1982-12-31', 'YYYY-MM-DD');

3. 不要な条件を省く

不要な条件を追加するとクエリが複雑になり、パフォーマンスが低下します。


7. まとめ

WHERE句を理解し使いこなすことで、効率的なデータ抽出が可能になります。基本的な演算子から複雑な条件指定、パフォーマンスの改善までを網羅的に解説しました。これらを活用して、必要なデータを迅速に取得しましょう!

次回の記事では、WHERE句と組み合わせることが多いGROUP BY句HAVING句について詳しく解説します。

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

コメント

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