logo

CASO SQL

El CASO es una declaración que opera consultas lógicas del tipo if-then-else. Esta declaración devuelve el valor cuando la condición especificada se evalúa como Verdadera. Cuando ninguna condición se evalúa como Verdadera, devuelve el valor de la parte ELSE.

Cuando no hay ninguna parte ELSE y ninguna condición se evalúa como Verdadera, devuelve un valor NULL.

En el lenguaje de consulta estructurado, la declaración CASE se utiliza en declaraciones SELECT, INSERT y DELETE con las tres cláusulas siguientes:

  1. Dónde cláusula
  2. Cláusula ORDEN POR
  3. Cláusula GRUPO POR

Esta declaración en SQL siempre va seguida de al menos un par de declaraciones WHEN y THEN y siempre termina con la palabra clave END.

la cadena java contiene

La declaración CASE es de dos tipos en bases de datos relacionales:

  1. Declaración CASO simple
  2. Declaración CASE buscada

Sintaxis de la declaración CASE en SQL

 CASE WHEN condition_1 THEN statement_1 WHEN condition_2 THEN statement_2 ……. WHEN condition_N THEN statement_N ELSE result END; 

Aquí, la declaración CASE evalúa cada condición una por una.

Si la expresión coincide con la condición de la primera cláusula WHEN, omite todas las condiciones WHEN y THEN adicionales y devuelve la instrucción_1 en el resultado.

Si la expresión no coincide con la primera condición WHEN, se compara con la segunda condición WHEN. Este proceso de coincidencia continuará hasta que la expresión coincida con cualquier condición WHEN.

Si ninguna condición coincide con la expresión, el control pasa automáticamente a la parte ELSE y devuelve su resultado. En la sintaxis CASE, la parte ELSE es opcional.

En sintaxis, CASE y END son las palabras clave más importantes que muestran el comienzo y el cierre de la declaración CASE.

Ejemplos de declaración CASE en SQL

Tomemos la tabla Student_Details, que contiene roll_no, nombre, calificaciones, materia y ciudad de los estudiantes.

amisha patel
Rollo_No Nombre_estudiante Stu_Asunto StuMarks ciudad_stu_
2001 akshay Ciencia 92 Noida
2002 RAM Matemáticas 49 Jaipur
2004 sham Inglés 52 Gurgaon
2005 yatin No 45 Lucknow
2006 Manoj Computadora 70 Ghaziabad
2007 Sheetal Matemáticas 82 Noida
2008 El pelo Ciencia 62 Gurgaon
2009 Yogesh Inglés 42 Lucknow
2010 RAM Computadora 88 Delhi
2011 sham No 35 Kanpur

Ejemplo 1: La siguiente declaración SQL utiliza una única condición WHEN y THEN para la declaración CASE:

 SELECT Roll_No, Stu_Name, Stu_Subject, Stu_marks, CASE WHEN Stu_Marks >= 50 THEN 'Student_Passed' ELSE 'Student_Failed' END AS Student_Result FROM Student_Details; 

Explicación de la consulta anterior:

Aquí, la declaración CASE verifica que si el StuMarks es mayor e igual a 50, devuelve Estudiante_aprobado de lo contrario se mueve a la DEMÁS parte y devoluciones Estudiante_fallido en el Resultado_estudiante columna.

Producción:

Rollo_No Nombre_estudiante Stu_Asunto StuMarks Resultado_estudiante
2001 akshay Ciencia 92 Estudiante_aprobado
2002 RAM Matemáticas 49 Estudiante_fallido
2004 sham Inglés 52 Estudiante_aprobado
2005 yatin No 45 Estudiante_fallido
2006 Manoj Computadora 70 Estudiante_aprobado
2007 Sheetal Matemáticas 82 Estudiante_aprobado
2008 El pelo Ciencia 62 Estudiante_aprobado
2009 Yogesh Inglés 42 Estudiante_fallido
2010 RAM Computadora 88 Estudiante_aprobado
2011 sham No 35 Estudiante_fallido

Ejemplo 2: La siguiente declaración SQL agrega más de una condición WHEN y THEN a la declaración CASE:

 SELECT Roll_No, Stu_Name, Stu_Subject, Stu_marks, CASE WHEN Stu_Marks &gt;= 90 THEN &apos;Outstanding&apos; WHEN Stu_Marks &gt;= 80 AND Stu_Marks = 70 AND Stu_Marks = 60 AND Stu_Marks = 50 AND Stu_Marks <60 50 then 'bad' when stu_marks < 'failed' end as stu_remarks from student_details; pre> <p> <strong>Explanation of above query:</strong> </p> <p>Here, the CASE statement checks multiple WHEN and THEN conditions one by one. If the value of <strong>Stu_Marks</strong> column is greater than or equals to <strong>90</strong> , it returns <strong>Outstanding</strong> otherwise moves to the further WHEN and THEN conditions.</p> <p>If none of the conditions is matched with the <strong>Student_Details</strong> table, CASE returns <strong>the NULL</strong> value in the <strong>Stu_Remarks</strong> column because there is no ELSE part in the query.</p> <p> <strong>Output:</strong> </p> <table class="table"> <tr> <th>Roll_No</th> <th>Stu_Name</th> <th>Stu_Subject</th> <th>Stu_Marks</th> <th>Stu_Remarks</th> </tr> <tr> <td>2001</td> <td>Akshay</td> <td>Science</td> <td>92</td> <td>Outstanding</td> </tr> <tr> <td>2002</td> <td>Ram Math</td> <td>49</td> <td>Failed</td> </tr> <tr> <td>2004</td> <td>Shyam</td> <td>English</td> <td>52</td> <td>Bad</td> </tr> <tr> <td>2005</td> <td>Yatin</td> <td>Hindi</td> <td>45</td> <td>Failed</td> </tr> <tr> <td>2006</td> <td>Manoj</td> <td>Computer</td> <td>70</td> <td>Good</td> </tr> <tr> <td>2007</td> <td>Sheetal</td> <td>Math</td> <td>82</td> <td>Excellent</td> </tr> <tr> <td>2008</td> <td>Parul</td> <td>Science</td> <td>62</td> <td>Average</td> </tr> <tr> <td>2009</td> <td>Yogesh</td> <td>English</td> <td>42</td> <td>Failed</td> </tr> <tr> <td>2010</td> <td>Ram</td> <td>Computer</td> <td>88</td> <td>Excellent</td> </tr> <tr> <td>2011</td> <td>Shyam</td> <td>Hindi</td> <td>35</td> <td>Failed</td> </tr> </table> <p> <strong>Example 3:</strong> </p> <p>Let&apos;s take another Employee_Details table which contains Emp_ID, Emp_Name, Emp_Dept, and Emp_Salary.</p> <table class="table"> <tr> <th>Emp_Id</th> <th>Emp_Name</th> <th>Emp_Dept</th> <th>Emp_Salary</th> </tr> <tr> <td>1</td> <td>Akshay</td> <td>Finance</td> <td>9000</td> </tr> <tr> <td>2</td> <td>Ram</td> <td>Marketing</td> <td>4000</td> </tr> <tr> <td>3</td> <td>Shyam</td> <td>Sales</td> <td>5000</td> </tr> <tr> <td>4</td> <td>Yatin</td> <td>Coding</td> <td>4000</td> </tr> <tr> <td>5</td> <td>Manoj</td> <td>Marketing</td> <td>5000</td> </tr> <tr> <td>1</td> <td>Akshay</td> <td>Finance</td> <td>8000</td> </tr> <tr> <td>2</td> <td>Ram</td> <td>Coding</td> <td>6000</td> </tr> <tr> <td>3</td> <td>Shyam</td> <td>Coding</td> <td>4000</td> </tr> <tr> <td>4</td> <td>Yatin</td> <td>Marketing</td> <td>8000</td> </tr> <tr> <td>5</td> <td>Manoj</td> <td>Finance</td> <td>3000</td> </tr> </table> <p> <strong>The following SQL query uses GROUP BY clause with CASE statement:</strong> </p> <pre> SELECT Emp_Id, Emp_Name, Emp_Dept, sum(Emp_Salary) as Total_Salary, CASE WHEN SUM(Emp_Salary) &gt;= 10000 THEN &apos;Increment&apos; ELSE &apos;Constant&apos; END AS Emp_Remarks FROM Employee_Details GROUP BY Emp_id, Emp_Name; </pre> <p> <strong>Output:</strong> </p> <table class="table"> <tr> <th>Emp_Id</th> <th>Emp_Name</th> <th>Emp_Dept</th> <th>Total_Salary</th> <th>Emp_Remarks</th> </tr> <tr> <td>1</td> <td>Akshay</td> <td>Finance</td> <td>17000</td> <td>Increment</td> </tr> <tr> <td>2</td> <td>Ram</td> <td>Marketing</td> <td>9000</td> <td>Decrement</td> </tr> <tr> <td>3</td> <td>Shyam</td> <td>Sales</td> <td>10000</td> <td>Increment</td> </tr> <tr> <td>4</td> <td>Yatin</td> <td>Coding</td> <td>12000</td> <td>Increment</td> </tr> <tr> <td>5</td> <td>Manoj</td> <td>Marketing</td> <td>8000</td> <td>Decrement</td> </tr> </table> <p> <strong>Example 4: In this example, we use the ORDER BY clause with a CASE statement in SQL:</strong> </p> <p>Let&apos;s take another Employee_Details table which contains Emp_ID, Emp_Name, Emp_Dept, and Emp_Age.</p> <p>We can check the data of Employee_Details by using the following query in SQL:</p> <pre> Select * From Employee_Details; </pre> <p> <strong>Output:</strong> </p> <table class="table"> <tr> <th>Emp_Id</th> <th>Emp_Name</th> <th>Emp_Dept</th> <th>Emp_Age</th> </tr> <tr> <td>1</td> <td>Akshay</td> <td>Finance</td> <td>23</td> </tr> <tr> <td>2</td> <td>Ram</td> <td>Marketing</td> <td>24</td> </tr> <tr> <td>3</td> <td>Balram</td> <td>Sales</td> <td>25</td> </tr> <tr> <td>4</td> <td>Yatin</td> <td>Coding</td> <td>22</td> </tr> <tr> <td>5</td> <td>Manoj</td> <td>Marketing</td> <td>23</td> </tr> <tr> <td>6</td> <td>Sheetal</td> <td>Finance</td> <td>24</td> </tr> <tr> <td>7</td> <td>Parul</td> <td>Finance</td> <td>22</td> </tr> <tr> <td>8</td> <td>Yogesh</td> <td>Coding</td> <td>25</td> </tr> <tr> <td>9</td> <td>Naveen</td> <td>Marketing</td> <td>22</td> </tr> <tr> <td>10</td> <td>Tarun</td> <td>Finance</td> <td>23</td> </tr> </table> <p>The following SQL query shows all the details of employees in the ascending order of employee names:</p> <pre> SELECT * FROM Employee_Details ORDER BY Emp_Name; </pre> <p> <strong>Output:</strong> </p> <table class="table"> <tr> <th>Emp_Id</th> <th>Emp_Name</th> <th>Emp_Dept</th> <th>Emp_Age</th> </tr> <tr> <td>1</td> <td>Akshay</td> <td>Finance</td> <td>23</td> </tr> <tr> <td>3</td> <td>Balram</td> <td>Sales</td> <td>25</td> </tr> <tr> <td>5</td> <td>Manoj</td> <td>Marketing</td> <td>23</td> </tr> <tr> <td>9</td> <td>Naveen</td> <td>Marketing</td> <td>22</td> </tr> <tr> <td>7</td> <td>Parul</td> <td>Finance</td> <td>22</td> </tr> <tr> <td>2</td> <td>Ram</td> <td>Marketing</td> <td>24</td> </tr> <tr> <td>6</td> <td>Sheetal</td> <td>Finance</td> <td>24</td> </tr> <tr> <td>10</td> <td>Tarun</td> <td>Finance</td> <td>23</td> </tr> <tr> <td>4</td> <td>Yatin</td> <td>Coding</td> <td>22</td> </tr> <tr> <td>8</td> <td>Yogesh</td> <td>Coding</td> <td>25</td> </tr> </table> <p>If you want to show those employees at the top who work in the Coding Department, then for this operation, you have to use single WHEN and THEN statement in the CASE statement as shown in the following query:</p> <pre> SELECT * FROM Employee_Details ORDER BY CASE WHEN Emp_Dept = &apos;Coding&apos; THEN 0 ELSE 1 END, Emp_Name; </pre> <p> <strong>Output:</strong> </p> <table class="table"> <tr> <th>Emp_Id</th> <th>Emp_Name</th> <th>Emp_Dept</th> <th>Emp_Age</th> </tr> <tr> <td>4</td> <td>Yatin</td> <td>Coding</td> <td>22</td> </tr> <tr> <td>8</td> <td>Yogesh</td> <td>Coding</td> <td>25</td> </tr> <tr> <td>1</td> <td>Akshay</td> <td>Finance</td> <td>23</td> </tr> <tr> <td>3</td> <td>Balram</td> <td>Sales</td> <td>25</td> </tr> <tr> <td>5</td> <td>Manoj</td> <td>Marketing</td> <td>23</td> </tr> <tr> <td>9</td> <td>Naveen</td> <td>Marketing</td> <td>22</td> </tr> <tr> <td>7</td> <td>Parul</td> <td>Finance</td> <td>22</td> </tr> <tr> <td>2</td> <td>Ram</td> <td>Marketing</td> <td>24</td> </tr> <tr> <td>6</td> <td>Sheetal</td> <td>Finance</td> <td>24</td> </tr> <tr> <td>10</td> <td>Tarun</td> <td>Finance</td> <td>23</td> </tr> </table> <hr></60>

Producción:

emp_id Emp_Name Emp_Dept Salario total Emp_Remarks
1 akshay Finanzas 17000 Incremento
2 RAM Marketing 9000 Decremento
3 sham Ventas 10000 Incremento
4 yatin Codificación 12000 Incremento
5 Manoj Marketing 8000 Decremento

Ejemplo 4: En este ejemplo, utilizamos la cláusula ORDER BY con una declaración CASE en SQL:

Tomemos otra tabla Employee_Details que contiene Emp_ID, Emp_Name, Emp_Dept y Emp_Age.

Podemos verificar los datos de Employee_Details usando la siguiente consulta en SQL:

 Select * From Employee_Details; 

Producción:

random no in java
emp_id Emp_Name Emp_Dept Emp_Edad
1 akshay Finanzas 23
2 RAM Marketing 24
3 Balram Ventas 25
4 yatin Codificación 22
5 Manoj Marketing 23
6 Sheetal Finanzas 24
7 El pelo Finanzas 22
8 Yogesh Codificación 25
9 naveen Marketing 22
10 Tarún Finanzas 23

La siguiente consulta SQL muestra todos los detalles de los empleados en orden ascendente de nombres de empleados:

 SELECT * FROM Employee_Details ORDER BY Emp_Name; 

Producción:

emp_id Emp_Name Emp_Dept Emp_Edad
1 akshay Finanzas 23
3 Balram Ventas 25
5 Manoj Marketing 23
9 naveen Marketing 22
7 El pelo Finanzas 22
2 RAM Marketing 24
6 Sheetal Finanzas 24
10 Tarún Finanzas 23
4 yatin Codificación 22
8 Yogesh Codificación 25

Si desea mostrar a los empleados en la parte superior que trabajan en el Departamento de Codificación, entonces para esta operación, debe usar una única declaración WHEN y THEN en la declaración CASE como se muestra en la siguiente consulta:

 SELECT * FROM Employee_Details ORDER BY CASE WHEN Emp_Dept = &apos;Coding&apos; THEN 0 ELSE 1 END, Emp_Name; 

Producción:

emp_id Emp_Name Emp_Dept Emp_Edad
4 yatin Codificación 22
8 Yogesh Codificación 25
1 akshay Finanzas 23
3 Balram Ventas 25
5 Manoj Marketing 23
9 naveen Marketing 22
7 El pelo Finanzas 22
2 RAM Marketing 24
6 Sheetal Finanzas 24
10 Tarún Finanzas 23