Oracle SQLのWHERE句を完全解説!条件指定の基本から部分一致・複数条件まで図解で理解

Oracle Master Bronze

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')のようにも書ける両方を同じ形式に


[参考]
SQL言語リファレンス – パターン一致条件

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

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