sql >> Base de Datos >  >> RDS >> Oracle

Cláusula condicional where de Oracle

Usando un CASO expresión en el DONDE cláusula debe hacer el truco. Cuando dice que no necesita la cláusula where si no se cumple la condición, entonces todo lo que desea es una condición como WHERE 1 = 1 , es decir, cuando no se cumple la condición, se devuelven todas las filas. Por lo tanto, debe hacer que la condición de no cumplido siempre sea VERDADERA .

Por ejemplo,

Tengo una mesa de empleados,

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>

Quiero seleccionar los detalles del empleado, si el departamento es 20, use la cláusula where; de ​​lo contrario, devuelva todos los detalles del empleado, pero filtre el departamento que cumple con la condición 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>

Entonces, para el departamento 20, el filtro se aplica por la cláusula where, y obtengo solo la fila para el nombre SCOTT, para otros devuelve todas las filas.