Menggunakan KASUS ekspresi di WHERE klausa harus melakukan trik. Ketika Anda mengatakan Anda tidak memerlukan klausa where jika kondisi tidak terpenuhi, maka yang Anda inginkan hanyalah kondisi seperti WHERE 1 = 1
, yaitu ketika kondisi tidak terpenuhi maka kembalikan semua baris. Jadi, Anda perlu membuat kondisi tidak terpenuhi seperti biasa TRUE .
Misalnya,
Saya memiliki tabel karyawan,
SQL> SELECT empno, ename, deptno
2 FROM emp;
EMPNO ENAME DEPTNO
---------- ---------- ----------
7369 SMITH 20
7499 ALLEN 30
7521 WARD 30
7566 JONES 20
7654 MARTIN 30
7698 BLAKE 30
7782 CLARK 10
7788 SCOTT 20
7839 KING 10
7844 TURNER 30
7876 ADAMS 20
7900 JAMES 30
7902 FORD 20
7934 MILLER 10
14 rows selected.
SQL>
Saya ingin memilih detail karyawan, jika departemen 20 maka gunakan klausa where else mengembalikan semua detail karyawan, tetapi filter departemen yang memenuhi kondisi where.
SQL> SELECT empno, ename, deptno
2 FROM emp
3 WHERE ename =
4 CASE
5 WHEN deptno = 20
6 THEN 'SCOTT'
7 ELSE ename
8 END
9 /
EMPNO ENAME DEPTNO
---------- ---------- ----------
7499 ALLEN 30
7521 WARD 30
7654 MARTIN 30
7698 BLAKE 30
7782 CLARK 10
7788 SCOTT 20
7839 KING 10
7844 TURNER 30
7900 JAMES 30
7934 MILLER 10
10 rows selected.
SQL>
Jadi, untuk departemen 20, filter diterapkan oleh klausa where, dan saya hanya mendapatkan baris untuk ename SCOTT, untuk yang lain mengembalikan semua baris.