Een CASE gebruiken uitdrukking in de WHERE clausule zou het moeten doen. Als je zegt dat je de where-clausule niet nodig hebt als niet aan de voorwaarde wordt voldaan, dan is alles wat je wilt een voorwaarde zoals WHERE 1 = 1
, d.w.z. wanneer niet aan de voorwaarde wordt voldaan, retourneert u alle rijen. U moet dus de voorwaarde waaraan niet is voldaan zoals altijd TRUE . maken .
Bijvoorbeeld,
Ik heb een personeelstafel,
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>
Ik wil de werknemersgegevens selecteren, als de afdeling 20 is, gebruik dan de waar-clausule, anders retourneer alle werknemersgegevens, maar filter de afdeling die voldoet aan de waar-voorwaarde.
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>
Dus voor afdeling 20 wordt het filter toegepast door de clausule waar, en ik krijg alleen de rij voor ename SCOTT, voor anderen retourneert het alle rijen.