The CAZ este o instrucțiune care operează tipul if-then-else de interogări logice. Această instrucțiune returnează valoarea când condiția specificată este evaluată la True. Când nicio condiție nu este evaluată la True, returnează valoarea părții ELSE.
Când nu există nicio parte ELSE și nicio condiție nu este evaluată la True, returnează o valoare NULL.
În limbajul de interogare structurat, instrucțiunea CASE este utilizată în instrucțiunile SELECT, INSERT și DELETE cu următoarele trei clauze:
- CLAUZA UNDE
- ORDER BY Clauza
- GROUP BY Clauza
Această instrucțiune în SQL este întotdeauna urmată de cel puțin o pereche de instrucțiuni WHEN și THEN și se termină întotdeauna cu cuvântul cheie END.
tipuri de rețea
Instrucțiunea CASE este de două tipuri în bazele de date relaționale:
- Declarație CASE simplă
- Declarație CASE căutată
Sintaxa instrucțiunii CASE în SQL
CASE WHEN condition_1 THEN statement_1 WHEN condition_2 THEN statement_2 ……. WHEN condition_N THEN statement_N ELSE result END;
Aici, instrucțiunea CASE evaluează fiecare condiție una câte una.
Dacă expresia se potrivește cu condiția primei clauze WHEN, omite toate condițiile ulterioare WHEN și THEN și returnează declarația_1 în rezultat.
versiunea java linux
Dacă expresia nu se potrivește cu prima condiție WHEN, se compară cu condiția secunde WHEN. Acest proces de potrivire va continua până când expresia este potrivită cu orice condiție WHEN.
Dacă nicio condiție nu este potrivită cu expresia, controlul merge automat la partea ELSE și returnează rezultatul său. În sintaxa CASE, partea ELSE este opțională.
În sintaxă, CASE și END sunt cele mai importante cuvinte cheie care arată începutul și închiderea instrucțiunii CASE.
Exemple de instrucțiune CASE în SQL
Să luăm tabelul Student_Details, care conține rol_no, nume, note, subiect și orașul studenților.
Rola numărul | Stu_Nume | Stu_Subiect | Stu_Marks | Stu_City |
---|---|---|---|---|
2001 | Akshay | Ştiinţă | 92 | Noida |
2002 | RAM | Matematică | 49 | Jaipur |
2004 | Shyam | Engleză | 52 | Gurgaon |
2005 | yatin | nu | Patru cinci | Lucknow |
2006 | Manoj | Calculator | 70 | Ghaziabad |
2007 | Tablă | Matematică | 82 | Noida |
2008 | Parul | Ştiinţă | 62 | Gurgaon |
2009 | Yogesh | Engleză | 42 | Lucknow |
2010 | RAM | Calculator | 88 | Delhi |
2011 | Shyam | nu | 35 | Kanpur |
Exemplul 1: Următoarea instrucțiune SQL utilizează o singură condiție WHEN și THEN pentru instrucțiunea 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;
Explicația interogării de mai sus:
Aici, instrucțiunea CASE verifică dacă Stu_Marks este mai mare decât și egal cu 50, se întoarce Student_Promis în caz contrar se mută la ALTE parte și se întoarce Student_Failed în Student_Result coloană.
Ieșire:
Rola numărul | Stu_Nume | Stu_Subiect | Stu_Marks | Student_Result |
---|---|---|---|---|
2001 | Akshay | Ştiinţă | 92 | Student_Promis |
2002 | RAM | Matematică | 49 | Student_Failed |
2004 | Shyam | Engleză | 52 | Student_Promis |
2005 | yatin | nu | Patru cinci | Student_Failed |
2006 | Manoj | Calculator | 70 | Student_Promis |
2007 | Tablă | Matematică | 82 | Student_Promis |
2008 | Parul | Ştiinţă | 62 | Student_Promis |
2009 | Yogesh | Engleză | 42 | Student_Failed |
2010 | RAM | Calculator | 88 | Student_Promis |
2011 | Shyam | nu | 35 | Student_Failed |
Exemplul 2: Următoarea instrucțiune SQL adaugă mai mult de o condiție WHEN și THEN la instrucțiunea 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>
Ieșire:
10 ml la oz
Emp_Id | Emp_Name | Emp_Dept | Salariu_total | Emp_Remarks |
---|---|---|---|---|
1 | Akshay | Finanţa | 17000 | Creştere |
2 | RAM | Marketing | 9000 | Decrementează |
3 | Shyam | Vânzări | 10000 | Creştere |
4 | yatin | Codificare | 12000 | Creştere |
5 | Manoj | Marketing | 8000 | Decrementează |
Exemplul 4: În acest exemplu, folosim clauza ORDER BY cu o instrucțiune CASE în SQL:
Să luăm un alt tabel Employee_Details care conține Emp_ID, Emp_Name, Emp_Dept și Emp_Age.
Putem verifica datele Employee_Details folosind următoarea interogare în SQL:
Select * From Employee_Details;
Ieșire:
Câte orașe din Statele Unite ale Americii
Emp_Id | Emp_Name | Emp_Dept | Emp_Age |
---|---|---|---|
1 | Akshay | Finanţa | 23 |
2 | RAM | Marketing | 24 |
3 | Balram | Vânzări | 25 |
4 | yatin | Codificare | 22 |
5 | Manoj | Marketing | 23 |
6 | Tablă | Finanţa | 24 |
7 | Parul | Finanţa | 22 |
8 | Yogesh | Codificare | 25 |
9 | Naveen | Marketing | 22 |
10 | Tarun | Finanţa | 23 |
Următoarea interogare SQL arată toate detaliile angajaților în ordinea crescătoare a numelor angajaților:
SELECT * FROM Employee_Details ORDER BY Emp_Name;
Ieșire:
Emp_Id | Emp_Name | Emp_Dept | Emp_Age |
---|---|---|---|
1 | Akshay | Finanţa | 23 |
3 | Balram | Vânzări | 25 |
5 | Manoj | Marketing | 23 |
9 | Naveen | Marketing | 22 |
7 | Parul | Finanţa | 22 |
2 | RAM | Marketing | 24 |
6 | Tablă | Finanţa | 24 |
10 | Tarun | Finanţa | 23 |
4 | yatin | Codificare | 22 |
8 | Yogesh | Codificare | 25 |
Dacă doriți să arătați acei angajați din partea de sus care lucrează în Departamentul de Codare, atunci pentru această operație, trebuie să utilizați o singură instrucțiune WHEN și THEN în instrucțiunea CASE, așa cum se arată în următoarea interogare:
SELECT * FROM Employee_Details ORDER BY CASE WHEN Emp_Dept = 'Coding' THEN 0 ELSE 1 END, Emp_Name;
Ieșire:
Emp_Id | Emp_Name | Emp_Dept | Emp_Age |
---|---|---|---|
4 | yatin | Codificare | 22 |
8 | Yogesh | Codificare | 25 |
1 | Akshay | Finanţa | 23 |
3 | Balram | Vânzări | 25 |
5 | Manoj | Marketing | 23 |
9 | Naveen | Marketing | 22 |
7 | Parul | Finanţa | 22 |
2 | RAM | Marketing | 24 |
6 | Tablă | Finanţa | 24 |
10 | Tarun | Finanţa | 23 |
60>