logo

מקרה של SQL

ה מקרה היא הצהרה שמפעילה שאילתות לוגיות מסוג if-אז-else. הצהרה זו מחזירה את הערך כאשר התנאי שצוין מוערך ל-True. כאשר אף תנאי אינו מוערך כ-True, הוא מחזיר את הערך של החלק ELSE.

כאשר אין חלק ELSE ואין תנאי מוערך כ-True, הוא מחזיר ערך NULL.

ב-Structured Query Language, הצהרת CASE משמשת בהצהרות SELECT, INSERT ו-DELETE עם שלושת הסעיפים הבאים:

javascript
  1. סעיף איפה
  2. הזמנה לפי סעיף
  3. GROUP BY סעיף

המשפט הזה ב-SQL תמיד מלווה לפחות זוג אחד של משפטים WHEN ו-THEN ותמיד מסתיים במילת המפתח END.

הצהרת CASE היא משני סוגים במסדי נתונים יחסיים:

  1. הצהרת CASE פשוטה
  2. חיפשתי בהצהרת CASE

תחביר של משפט CASE ב-SQL

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

כאן, הצהרת CASE מעריכה כל תנאי אחד לאחד.

אם הביטוי תואם את התנאי של פסקת WHEN הראשונה, הוא מדלג על כל התנאים הנוספים של WHEN ו-THEN ומחזיר את המשפט_1 בתוצאה.

אם הביטוי אינו תואם לתנאי WHEN הראשון, הוא משווה לתנאי WHEN השניות. תהליך ההתאמה הזה יימשך עד להתאמה של הביטוי לכל תנאי WHEN.

אם שום תנאי לא תואם לביטוי, הפקד עובר אוטומטית לחלק ELSE ומחזיר את התוצאה שלו. בתחביר CASE, החלק ELSE הוא אופציונלי.

בתחביר, CASE ו-END הן מילות המפתח החשובות ביותר שמציגות את ההתחלה והסיום של הצהרת CASE.

דוגמאות להצהרת CASE ב-SQL

ניקח את הטבלה Student_Details, המכילה roll_no, שם, סימנים, נושא ועיר התלמידים.

רול_לא Stu_Name Stu_Subject Stu_Marks Stu_City
2001 אקשיי מַדָע 92 נוידה
2002 RAM מתמטיקה 49 ג'איפור
2004 שיאם אנגלית 52 גורגאון
2005 יאטין לא ארבע חמש מזל
2006 Manoj מַחשֵׁב 70 גאזיאבאד
2007 Sheetal מתמטיקה 82 נוידה
2008 השיער מַדָע 62 גורגאון
2009 יוג'ש אנגלית 42 מזל
2010 RAM מַחשֵׁב 88 דלהי
2011 שיאם לא 35 קאנפור

דוגמה 1: משפט ה-SQL הבא משתמש בתנאי WHEN ו-DAN בודדים למשפט 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; 

הסבר לשאילתה למעלה:

כאן, הצהרת CASE בודקת שאם ה Stu_Marks גדול מ-50 ושווה ל-50, הוא מחזיר סטודנט_עבר אחרת עובר ל- אַחֵר חלק וחוזר תלמיד_נכשל בתוך ה Student_Result טור.

תְפוּקָה:

רול_לא Stu_Name Stu_Subject Stu_Marks Student_Result
2001 אקשיי מַדָע 92 סטודנט_עבר
2002 RAM מתמטיקה 49 תלמיד_נכשל
2004 שיאם אנגלית 52 סטודנט_עבר
2005 יאטין לא ארבע חמש תלמיד_נכשל
2006 Manoj מַחשֵׁב 70 סטודנט_עבר
2007 Sheetal מתמטיקה 82 סטודנט_עבר
2008 השיער מַדָע 62 סטודנט_עבר
2009 יוג'ש אנגלית 42 תלמיד_נכשל
2010 RAM מַחשֵׁב 88 סטודנט_עבר
2011 שיאם לא 35 תלמיד_נכשל

דוגמה 2: הצהרת SQL הבאה מוסיפה יותר מתנאי WHEN ו-DAN אחד למשפט CASE:

מחרוזת תאריך java
 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>

תְפוּקָה:

Emp_Id Emp_Name Emp_Dept סך_משכורת Emp_Remarks
1 אקשיי לְמַמֵן 17,000 תוֹסֶפֶת
2 RAM שיווק 9000 ירידה
3 שיאם מכירות 10000 תוֹסֶפֶת
4 יאטין סִמוּל 12000 תוֹסֶפֶת
5 Manoj שיווק 8000 ירידה

דוגמה 4: בדוגמה זו, אנו משתמשים בסעיף ORDER BY עם משפט CASE ב-SQL:

בואו ניקח עוד טבלה Employee_Details שמכילה Emp_ID, Emp_Name, Emp_Dept ו-Emp_Age.

אנו יכולים לבדוק את הנתונים של Employee_Details באמצעות השאילתה הבאה ב-SQL:

 Select * From Employee_Details; 

תְפוּקָה:

Emp_Id Emp_Name Emp_Dept Emp_Age
1 אקשיי לְמַמֵן 23
2 RAM שיווק 24
3 באלרם מכירות 25
4 יאטין סִמוּל 22
5 Manoj שיווק 23
6 Sheetal לְמַמֵן 24
7 השיער לְמַמֵן 22
8 יוג'ש סִמוּל 25
9 נאווין שיווק 22
10 טארון לְמַמֵן 23

שאילתת SQL הבאה מציגה את כל הפרטים של העובדים בסדר עולה של שמות העובדים:

 SELECT * FROM Employee_Details ORDER BY Emp_Name; 

תְפוּקָה:

Emp_Id Emp_Name Emp_Dept Emp_Age
1 אקשיי לְמַמֵן 23
3 באלרם מכירות 25
5 Manoj שיווק 23
9 נאווין שיווק 22
7 השיער לְמַמֵן 22
2 RAM שיווק 24
6 Sheetal לְמַמֵן 24
10 טארון לְמַמֵן 23
4 יאטין סִמוּל 22
8 יוג'ש סִמוּל 25

אם ברצונך להציג את העובדים בחלק העליון שעובדים במחלקת הקידוד, אז עבור פעולה זו, עליך להשתמש במשפט WHEN ו-THEN בודדים במשפט CASE כפי שמוצג בשאילתה הבאה:

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

תְפוּקָה:

Emp_Id Emp_Name Emp_Dept Emp_Age
4 יאטין סִמוּל 22
8 יוג'ש סִמוּל 25
1 אקשיי לְמַמֵן 23
3 באלרם מכירות 25
5 Manoj שיווק 23
9 נאווין שיווק 22
7 השיער לְמַמֵן 22
2 RAM שיווק 24
6 Sheetal לְמַמֵן 24
10 טארון לְמַמֵן 23