Oracle
 sql >> Database >  >> RDS >> Oracle

Clausola dove condizionale Oracle

Utilizzo di una CASSA espressione nel WHERE la clausola dovrebbe fare il trucco. Quando dici che non hai bisogno della clausola where se la condizione non è soddisfatta, tutto ciò che desideri è una condizione come WHERE 1 = 1 , ovvero quando la condizione non è soddisfatta, restituire tutte le righe. Quindi, devi rendere la condizione non soddisfatta come sempre VERO .

Ad esempio,

Ho un tavolo dipendente,

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>

Voglio selezionare i dettagli del dipendente, se il dipartimento è 20, usa la clausola where altrimenti restituisce tutti i dettagli del dipendente, ma filtra il dipartimento che soddisfa la condizione 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>

Quindi, per il dipartimento 20, il filtro viene applicato dalla clausola where e ottengo solo la riga per ename SCOTT, per gli altri restituisce tutte le righe.