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:
- Dónde cláusula
- Cláusula ORDEN POR
- 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:
- Declaración CASO simple
- 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 >= 90 THEN 'Outstanding' WHEN Stu_Marks >= 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'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) >= 10000 THEN 'Increment' ELSE 'Constant' 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'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 = 'Coding' 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 = 'Coding' 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 |
60>