SQLでデータを抽出する際に欠かせないのがWHERE句です。条件に基づいて必要なデータだけを取得することで、効率的なデータ管理が可能になります。本記事では、WHERE句の基本から応用、さらにはパフォーマンスの改善方法までを詳しく解説します。
1. WHERE句とは?
WHERE句は、SQLのSELECT
文において、条件を指定するために使用します。この条件によって、必要なデータのみを効率よく抽出することが可能になります。
基本構文は以下の通りです:
SELECT 列名1, 列名2, ...
FROM テーブル名
WHERE 条件;
使用例:
以下のクエリは、給与(SAL
)が3000を超える従業員を抽出します。
SELECT empno, ename, sal
FROM emp
WHERE sal > 3000;
結果:
EMPNO | ENAME | SAL |
---|---|---|
7566 | JONES | 2975 |
7698 | BLAKE | 2850 |
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
コメント