Oracle SQLでデータを抽出する際に欠かせないのがWHERE句です。
本記事では、初心者の方にもわかりやすく、WHERE句の基本的な使い方から、複雑な条件指定まで、豊富な図解と例文を使って丁寧に解説します。
select 文についてはコチラ。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. WHERE句とは?
WHERE句は、SQLでデータを検索する際に条件を指定するために使用します。
たとえば、従業員テーブルから「部署が10の人」だけを抽出したい場合に使います。
2. WHERE句の基本構文
sqlコピーする編集するSELECT 列名 FROM 表名
WHERE 条件;
3. 使用するサンプルテーブル
以下のEMP表を使って解説します。
EMP表のCREATE文とINSERT文
CREATE TABLE EMP (
EMPNO NUMBER(4),
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2)
);
INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK', 7902, DATE '1980-12-17', 800, NULL, 20);
INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, DATE '1981-02-20',1600, 300, 30);
INSERT INTO EMP VALUES (7521, 'WARD', 'SALESMAN', 7698, DATE '1981-02-22',1250, 500, 30);
INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER', 7839, DATE '1981-04-02',2975, NULL, 20);
INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839, DATE '1981-06-09',2450, NULL, 10); -- 追加行
4. 単純な条件指定
部門番号が10の社員を抽出
SELECT * FROM EMP WHERE DEPTNO = 10;
コマンド実行例
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
SQL> SELECT * FROM EMP WHERE DEPTNO = 10;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
▼図:WHERE句による抽出のイメージ
EMPテーブル全体(抜粋)
┌─────┬───────┬───────┐
│EMPNO│ENAME │DEPTNO │
├─────┼───────┼───────┤
│7369 │SMITH │20 │
│7499 │ALLEN │30 │
│7782 │CLARK │10 │★抽出対象 ← 追加
└─────┴───────┴───────┘
5. 文字列に対する条件指定と大小文字の注意点
SELECT * FROM EMP WHERE ENAME = 'SMITH';
🔸Oracleは文字列比較で大文字・小文字を区別します
-- これは一致する
SELECT * FROM EMP WHERE ENAME = 'SMITH';
-- これは一致しない(小文字)
SELECT * FROM EMP WHERE ENAME = 'smith';
コマンド実行例
SQL> SELECT * FROM EMP WHERE ENAME = 'SMITH';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
SQL> SELECT * FROM EMP WHERE ENAME = 'smith';
no rows selected ★結果が出力されない
6. 🔍なぜUPPERを使えば大文字・小文字を無視できるのか?
SELECT * FROM EMP WHERE UPPER(ENAME) = 'SMITH';
両方をUPPER関数で大文字に変換することで、大小文字の違いを無視して比較できます。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
7. 比較演算子を使用した条件
| 比較演算子 | 説明 | 使用例 |
|---|---|---|
| = | 等しい | WHERE SAL = 800 |
| <> | 等しくない | WHERE DEPTNO <> 10 |
| >, < | より大きい/小さい | WHERE SAL > 1000 |
| >=, <= | 以上/以下 | WHERE SAL <= 2000 |
8. AND/ORの複数条件
SELECT * FROM EMP
WHERE DEPTNO = 20 AND SAL >= 2000;
SELECT * FROM EMP
WHERE DEPTNO = 10 OR DEPTNO = 30;
コマンド実行例
SQL> SELECT * FROM EMP
2 WHERE DEPTNO = 20 AND SAL >= 2000;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7566 JONES MANAGER 7839 02-APR-81 2975 20
SQL> SELECT * FROM EMP
2 WHERE DEPTNO = 10 OR DEPTNO = 30;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
9. NULLの判定
SELECT * FROM EMP WHERE COMM IS NULL;
SELECT * FROM EMP WHERE COMM IS NOT NULL;
コマンド実行例
SQL> SELECT * FROM EMP WHERE COMM IS NULL;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7566 JONES MANAGER 7839 02-APR-81 2975 20
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
SQL> SELECT * FROM EMP WHERE COMM IS NOT NULL;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
10. LIKE句の使用
SELECT * FROM EMP WHERE ENAME LIKE 'S%';
SELECT * FROM EMP WHERE ENAME LIKE '_M%';
コマンド実行例
SQL> SELECT * FROM EMP WHERE ENAME LIKE 'S%';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
SQL> SELECT * FROM EMP WHERE ENAME LIKE '_M%';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
11. IN条件による複数値の比較
SELECT * FROM EMP WHERE DEPTNO IN (10, 20);
コマンド実行例
SQL> SELECT * FROM EMP WHERE DEPTNO IN (10, 20);
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7566 JONES MANAGER 7839 02-APR-81 2975 20
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
12. BETWEENによる範囲指定
SELECT * FROM EMP WHERE SAL BETWEEN 1000 AND 2000;
コマンド実行例
SQL> SELECT * FROM EMP WHERE SAL BETWEEN 1000 AND 2000;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
13. NOT演算子による否定
SELECT * FROM EMP WHERE DEPTNO <> 10;
コマンド実行例
SQL> SELECT * FROM EMP WHERE DEPTNO <> 10;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
※DEPTNO=10ではない値の行を出力
14. グループ化された複雑な条件
SELECT * FROM EMP
WHERE (DEPTNO = 10 OR DEPTNO = 20)
AND SAL > 2000;
コマンド実行例
SQL> SELECT * FROM EMP
2 WHERE (DEPTNO = 10 OR DEPTNO = 20)
3 AND SAL > 2000;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7566 JONES MANAGER 7839 02-APR-81 2975 20
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
✅まとめ:WHERE句の要点
- 条件を使って必要な行を抽出できる
- NULLは
IS NULLで判定 - 文字列は大文字・小文字に注意し、UPPERで統一可能
- 比較演算子、IN、BETWEEN、LIKE、NOT、AND/ORを組み合わせて多彩な検索が可能
🔍補足:文字列比較時の注意点まとめ
| ポイント | 内容 |
|---|---|
| Oracleは文字列を大文字・小文字で区別する | 'SMITH' ≠ 'smith' |
| 比較の際はUPPERやLOWERで統一するのが安全 | UPPER(ENAME) = 'SMITH' |
逆に、ENAME = UPPER('smith')のようにも書ける | 両方を同じ形式に |
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント