IL CASO è un'istruzione che esegue query logiche di tipo if-then-else. Questa istruzione restituisce il valore quando la condizione specificata restituisce True. Quando nessuna condizione risulta vera, restituisce il valore della parte ELSE.
Quando non è presente alcuna parte ELSE e nessuna condizione restituisce True, restituisce un valore NULL.
Nello Structured Query Language, l'istruzione CASE viene utilizzata nelle istruzioni SELECT, INSERT e DELETE con le seguenti tre clausole:
- Dove la clausola
- ORDINA PER Clausola
- Clausola GRUPPO PER
Questa istruzione in SQL è sempre seguita da almeno una coppia di istruzioni WHEN e THEN e termina sempre con la parola chiave END.
L'istruzione CASE è di due tipi nei database relazionali:
tipi di rete
- Semplice istruzione CASE
- Dichiarazione CASE cercata
Sintassi dell'istruzione CASE in SQL
CASE WHEN condition_1 THEN statement_1 WHEN condition_2 THEN statement_2 ……. WHEN condition_N THEN statement_N ELSE result END;
Qui, l'istruzione CASE valuta ciascuna condizione una per una.
Se l'espressione soddisfa la condizione della prima clausola WHEN, salta tutte le ulteriori condizioni WHEN e THEN e restituisce istruzione_1 nel risultato.
Se l'espressione non corrisponde alla prima condizione WHEN, viene confrontata con la seconda condizione WHEN. Questo processo di corrispondenza continuerà finché l'espressione non verrà abbinata a una qualsiasi condizione WHEN.
Se nessuna condizione corrisponde all'espressione, il controllo passa automaticamente alla parte ELSE e restituisce il risultato. Nella sintassi CASE, la parte ELSE è facoltativa.
versione java linux
Nella sintassi, CASE e END sono le parole chiave più importanti che mostrano l'inizio e la chiusura dell'istruzione CASE.
Esempi di istruzione CASE in SQL
Prendiamo la tabella Student_Details, che contiene roll_no, nome, voti, materia e città degli studenti.
Rotolo_No | Stu_Nome | Stu_Oggetto | Stu_Marks | Stu_Città |
---|---|---|---|---|
2001 | Akshay | Scienza | 92 | Noida |
2002 | Ram | Matematica | 49 | Jaipur |
2004 | Shyam | Inglese | 52 | Gurgaon |
2005 | Yatin | No | Quattro cinque | Lucknow |
2006 | Manoj | Computer | 70 | Ghaziabad |
2007 | Foglio | Matematica | 82 | Noida |
2008 | I capelli | Scienza | 62 | Gurgaon |
2009 | Yoghesh | Inglese | 42 | Lucknow |
2010 | Ram | Computer | 88 | Delhi |
2011 | Shyam | No | 35 | Kanpur |
Esempio 1: La seguente istruzione SQL utilizza una singola condizione WHEN e THEN per l'istruzione 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;
Spiegazione della query precedente:
Qui, l'istruzione CASE controlla che se il Stu_Marks è maggiore ed uguale a 50, restituisce Studente_Superato altrimenti si sposta su ALTRO parte e ritorna Studente_Fallito nel Studente_Risultato colonna.
Produzione:
raccolte Java
Rotolo_No | Stu_Nome | Stu_Oggetto | Stu_Marks | Studente_Risultato |
---|---|---|---|---|
2001 | Akshay | Scienza | 92 | Studente_Superato |
2002 | Ram | Matematica | 49 | Studente_Fallito |
2004 | Shyam | Inglese | 52 | Studente_Superato |
2005 | Yatin | No | Quattro cinque | Studente_Fallito |
2006 | Manoj | Computer | 70 | Studente_Superato |
2007 | Foglio | Matematica | 82 | Studente_Superato |
2008 | I capelli | Scienza | 62 | Studente_Superato |
2009 | Yoghesh | Inglese | 42 | Studente_Fallito |
2010 | Ram | Computer | 88 | Studente_Superato |
2011 | Shyam | No | 35 | Studente_Fallito |
Esempio 2: La seguente istruzione SQL aggiunge più di una condizione WHEN e THEN all'istruzione 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>
Produzione:
Emp_Id | Dip_Nome | Dip_Dip | Totale_Stipendio | Emp_Remarks |
---|---|---|---|---|
1 | Akshay | Finanza | 17000 | Incremento |
2 | Ram | Marketing | 9000 | Decremento |
3 | Shyam | Saldi | 10000 | Incremento |
4 | Yatin | Codifica | 12000 | Incremento |
5 | Manoj | Marketing | 8000 | Decremento |
Esempio 4: in questo esempio utilizziamo la clausola ORDER BY con un'istruzione CASE in SQL:
list.sort java
Prendiamo un'altra tabella Employee_Details che contiene Emp_ID, Emp_Name, Emp_Dept e Emp_Age.
Possiamo controllare i dati di Employee_Details utilizzando la seguente query in SQL:
Select * From Employee_Details;
Produzione:
Emp_Id | Dip_Nome | Dip_Dip | Emp_Age |
---|---|---|---|
1 | Akshay | Finanza | 23 |
2 | Ram | Marketing | 24 |
3 | Balram | Saldi | 25 |
4 | Yatin | Codifica | 22 |
5 | Manoj | Marketing | 23 |
6 | Foglio | Finanza | 24 |
7 | I capelli | Finanza | 22 |
8 | Yoghesh | Codifica | 25 |
9 | Naveen | Marketing | 22 |
10 | Tarun | Finanza | 23 |
La seguente query SQL mostra tutti i dettagli dei dipendenti in ordine crescente dei nomi dei dipendenti:
SELECT * FROM Employee_Details ORDER BY Emp_Name;
Produzione:
Emp_Id | Dip_Nome | Dip_Dip | Emp_Age |
---|---|---|---|
1 | Akshay | Finanza | 23 |
3 | Balram | Saldi | 25 |
5 | Manoj | Marketing | 23 |
9 | Naveen | Marketing | 22 |
7 | I capelli | Finanza | 22 |
2 | Ram | Marketing | 24 |
6 | Foglio | Finanza | 24 |
10 | Tarun | Finanza | 23 |
4 | Yatin | Codifica | 22 |
8 | Yoghesh | Codifica | 25 |
Se vuoi mostrare i dipendenti in alto che lavorano nel reparto di codifica, per questa operazione devi utilizzare le singole istruzioni WHEN e THEN nell'istruzione CASE come mostrato nella seguente query:
dimensione del carattere in lattice
SELECT * FROM Employee_Details ORDER BY CASE WHEN Emp_Dept = 'Coding' THEN 0 ELSE 1 END, Emp_Name;
Produzione:
Emp_Id | Dip_Nome | Dip_Dip | Emp_Age |
---|---|---|---|
4 | Yatin | Codifica | 22 |
8 | Yoghesh | Codifica | 25 |
1 | Akshay | Finanza | 23 |
3 | Balram | Saldi | 25 |
5 | Manoj | Marketing | 23 |
9 | Naveen | Marketing | 22 |
7 | I capelli | Finanza | 22 |
2 | Ram | Marketing | 24 |
6 | Foglio | Finanza | 24 |
10 | Tarun | Finanza | 23 |
60>