logo

SQL-FALL

Der FALL ist eine Anweisung, die logische Abfragen vom Typ „Wenn-Dann-Sonst“ ausführt. Diese Anweisung gibt den Wert zurück, wenn die angegebene Bedingung „True“ ergibt. Wenn keine Bedingung „True“ ergibt, wird der Wert des ELSE-Teils zurückgegeben.

Wenn es keinen ELSE-Teil gibt und keine Bedingung als „True“ ausgewertet wird, wird ein NULL-Wert zurückgegeben.

In der strukturierten Abfragesprache wird die CASE-Anweisung in SELECT-, INSERT- und DELETE-Anweisungen mit den folgenden drei Klauseln verwendet:

  1. WHERE-Klausel
  2. ORDER BY-Klausel
  3. GROUP BY-Klausel

Auf diese Anweisung in SQL folgt immer mindestens ein Paar WHEN- und THEN-Anweisungen und sie wird immer mit dem Schlüsselwort END abgeschlossen.

Es gibt zwei Arten der CASE-Anweisung in relationalen Datenbanken:

  1. Einfache CASE-Anweisung
  2. Durchsuchte CASE-Anweisung

Syntax der CASE-Anweisung in SQL

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

Hier wertet die CASE-Anweisung jede Bedingung einzeln aus.

Sortieren Sie eine Arrayliste in Java

Wenn der Ausdruck mit der Bedingung der ersten WHEN-Klausel übereinstimmt, überspringt er alle weiteren WHEN- und THEN-Bedingungen und gibt im Ergebnis die Anweisung_1 zurück.

Wenn der Ausdruck nicht mit der ersten WHEN-Bedingung übereinstimmt, wird er mit der zweiten WHEN-Bedingung verglichen. Dieser Abgleichvorgang wird fortgesetzt, bis der Ausdruck mit einer WHEN-Bedingung übereinstimmt.

Wenn keine Bedingung mit dem Ausdruck übereinstimmt, geht das Steuerelement automatisch zum ELSE-Teil und gibt sein Ergebnis zurück. In der CASE-Syntax ist der ELSE-Teil optional.

In der Syntax sind CASE und END die wichtigsten Schlüsselwörter, die den Anfang und das Ende der CASE-Anweisung anzeigen.

Beispiele für CASE-Anweisungen in SQL

Nehmen wir die Tabelle „Student_Details“, die Rollennummer, Name, Noten, Fach und Stadt der Studenten enthält.

Rollen_Nr Stu_Name Stu_Subject Stu_Marks Stu_City
2001 Akshay Wissenschaft 92 Noida
2002 RAM Mathematik 49 Jaipur
2004 Shyam Englisch 52 Gurgaon
2005 Yatin Nein Vier fünf Lucknow
2006 Manoj Computer 70 Ghaziabad
2007 Blech Mathematik 82 Noida
2008 Das Haar Wissenschaft 62 Gurgaon
2009 Yogesh Englisch 42 Lucknow
2010 RAM Computer 88 Delhi
2011 Shyam Nein 35 Kanpur

Beispiel 1: Die folgende SQL-Anweisung verwendet eine einzelne WHEN- und THEN-Bedingung für die CASE-Anweisung:

 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; 

Erläuterung der obigen Abfrage:

Hier prüft die CASE-Anweisung, ob die Stu_Marks größer als und gleich 50 ist, wird zurückgegeben Student_Passed andernfalls wechselt zum ANDERS Teil und Rückgabe Student_Failed im Student_Result Spalte.

Ausgabe:

Rollen_Nr Stu_Name Stu_Subject Stu_Marks Student_Result
2001 Akshay Wissenschaft 92 Student_Passed
2002 RAM Mathematik 49 Student_Failed
2004 Shyam Englisch 52 Student_Passed
2005 Yatin Nein Vier fünf Student_Failed
2006 Manoj Computer 70 Student_Passed
2007 Blech Mathematik 82 Student_Passed
2008 Das Haar Wissenschaft 62 Student_Passed
2009 Yogesh Englisch 42 Student_Failed
2010 RAM Computer 88 Student_Passed
2011 Shyam Nein 35 Student_Failed

Beispiel 2: Die folgende SQL-Anweisung fügt der CASE-Anweisung mehr als eine WHEN- und THEN-Bedingung hinzu:

 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>

Ausgabe:

Emp_Id Emp_Name Emp_Abt Gesamtgehalt Emp_Remarks
1 Akshay Finanzen 17000 Zuwachs
2 RAM Marketing 9000 Dekrementieren
3 Shyam Verkäufe 10000 Zuwachs
4 Yatin Codierung 12000 Zuwachs
5 Manoj Marketing 8000 Dekrementieren

Beispiel 4: In diesem Beispiel verwenden wir die ORDER BY-Klausel mit einer CASE-Anweisung in SQL:

Nehmen wir eine weitere Tabelle „Employee_Details“, die Emp_ID, Emp_Name, Emp_Dept und Emp_Age enthält.

Wir können die Daten von Employee_Details überprüfen, indem wir die folgende Abfrage in SQL verwenden:

 Select * From Employee_Details; 

Ausgabe:

Emp_Id Emp_Name Emp_Abt Emp_Age
1 Akshay Finanzen 23
2 RAM Marketing 24
3 Balram Verkäufe 25
4 Yatin Codierung 22
5 Manoj Marketing 23
6 Blech Finanzen 24
7 Das Haar Finanzen 22
8 Yogesh Codierung 25
9 Naveen Marketing 22
10 Tarun Finanzen 23

Die folgende SQL-Abfrage zeigt alle Details zu Mitarbeitern in aufsteigender Reihenfolge der Mitarbeiternamen:

 SELECT * FROM Employee_Details ORDER BY Emp_Name; 

Ausgabe:

Emp_Id Emp_Name Emp_Abt Emp_Age
1 Akshay Finanzen 23
3 Balram Verkäufe 25
5 Manoj Marketing 23
9 Naveen Marketing 22
7 Das Haar Finanzen 22
2 RAM Marketing 24
6 Blech Finanzen 24
10 Tarun Finanzen 23
4 Yatin Codierung 22
8 Yogesh Codierung 25

Wenn Sie die Mitarbeiter an der Spitze anzeigen möchten, die in der Codierungsabteilung arbeiten, müssen Sie für diesen Vorgang eine einzelne WHEN- und THEN-Anweisung in der CASE-Anweisung verwenden, wie in der folgenden Abfrage gezeigt:

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

Ausgabe:

Emp_Id Emp_Name Emp_Abt Emp_Age
4 Yatin Codierung 22
8 Yogesh Codierung 25
1 Akshay Finanzen 23
3 Balram Verkäufe 25
5 Manoj Marketing 23
9 Naveen Marketing 22
7 Das Haar Finanzen 22
2 RAM Marketing 24
6 Blech Finanzen 24
10 Tarun Finanzen 23