logo

CASO SQL

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:

  1. Dove la clausola
  2. ORDINA PER Clausola
  3. 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
  1. Semplice istruzione CASE
  2. 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 &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>

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 = &apos;Coding&apos; 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