logo

SQL CASE

The LIETAS ir paziņojums, kas darbojas ar ja-then-else veida loģiskiem vaicājumiem. Šis paziņojums atgriež vērtību, kad norādītais nosacījums tiek novērtēts kā True. Ja neviens nosacījums nenovērtē vērtību True, tas atgriež ELSE daļas vērtību.

Ja nav ELSE daļas un neviens nosacījums netiek novērtēts uz True, tas atgriež vērtību NULL.

Strukturētā vaicājuma valodā priekšraksts CASE tiek izmantots priekšrakstos SELECT, INSERT un DELETE ar šādām trim klauzulām:

  1. KUR klauzula
  2. PASŪTĪJUMS PĒC klauzulas
  3. GROUP BY klauzula

Šim priekšrakstam SQL vienmēr seko vismaz viens priekšrakstu WHEN un THEN pāris, un tas vienmēr tiek pabeigts ar END atslēgvārdu.

javascript

Relāciju datu bāzēs CASE paziņojums ir divu veidu:

  1. Vienkāršs CASE paziņojums
  2. Pārmeklēts CASE paziņojums

CASE priekšraksta sintakse SQL

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

Šeit CASE priekšraksts novērtē katru nosacījumu pa vienam.

Ja izteiksme atbilst pirmās WHEN klauzulas nosacījumam, tā izlaiž visus turpmākos WHEN un THEN nosacījumus un rezultātā atgriež paziņojumu_1.

Ja izteiksme neatbilst pirmajam nosacījumam WHEN, tā tiek salīdzināta ar nosacījumu WHEN sekundēm. Šis saskaņošanas process turpināsies, līdz izteiksme tiks saskaņota ar jebkuru WHEN nosacījumu.

Ja izteiksmei neatbilst neviens nosacījums, vadīkla automātiski pāriet uz ELSE daļu un atgriež rezultātu. CASE sintaksē ELSE daļa nav obligāta.

Sintaksē CASE un END ir vissvarīgākie atslēgvārdi, kas parāda CASE priekšraksta sākumu un noslēgumu.

CASE priekšraksta piemēri SQL

Ņemsim tabulu Student_Details, kurā ir roll_no, nosaukums, atzīmes, priekšmets un studentu pilsēta.

r c valodā
Roll_Nr Stu_Name Stu_Subject Stu_Marks Stu_City
2001. gads Akshay Zinātne 92 Noida
2002. gads Ram Matemātika 49 Džaipura
2004. gads Shyam Angļu 52 Gurgaons
2005. gads jatin Četri Laknava
2006. gads Manoj Dators 70 Ghaziabad
2007. gads Sheetal Matemātika 82 Noida
2008. gads Mati Zinātne 62 Gurgaons
2009. gads Jogešs Angļu 42 Laknava
2010. gads Ram Dators 88 Deli
2011. gads Shyam 35 Kanpura

1. piemērs: Šis SQL priekšraksts CASE priekšrakstam izmanto vienu nosacījumu WHEN un THEN:

 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; 

Iepriekšējā vaicājuma skaidrojums:

Šeit CASE paziņojums pārbauda, ​​vai Stu_Marks ir lielāks par un vienāds ar 50, tas atgriežas Students_nokārtots pretējā gadījumā pārceļas uz CITS daļa un atgriežas Students_Neizdevās iekš Students_Rezultāts kolonna.

Izvade:

Roll_Nr Stu_Vārds Stu_Subject Stu_Marks Students_Rezultāts
2001. gads Akshay Zinātne 92 Students_nokārtots
2002. gads Ram Matemātika 49 Students_Neizdevās
2004. gads Shyam Angļu 52 Students_nokārtots
2005. gads jatin Četri Students_Neizdevās
2006. gads Manoj Dators 70 Students_nokārtots
2007. gads Sheetal Matemātika 82 Students_nokārtots
2008. gads Mati Zinātne 62 Students_nokārtots
2009. gads Jogešs Angļu 42 Students_Neizdevās
2010. gads Ram Dators 88 Students_nokārtots
2011. gads Shyam 35 Students_Neizdevās

2. piemērs: Šis SQL priekšraksts CASE priekšrakstam pievieno vairāk nekā vienu WHEN un THEN nosacījumu:

 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>

Izvade:

Emp_Id Emp_Name Emp_Dept Kopā_Alga Emp_Remarks
1 Akshay Finanses 17 000 Pieaugums
2 Ram Mārketings 9000 Samazinājums
3 Shyam Pārdošana 10 000 Pieaugums
4 jatin Kodēšana 12 000 Pieaugums
5 Manoj Mārketings 8000 Samazinājums

4. piemērs: šajā piemērā mēs izmantojam klauzulu ORDER BY ar CASE priekšrakstu SQL:

Paņemsim citu tabulu Employee_Details, kurā ir Emp_ID, Emp_Name, Emp_Dept un Emp_Age.

Mēs varam pārbaudīt Employee_Details datus, izmantojot šādu vaicājumu SQL:

 Select * From Employee_Details; 

Izvade:

Pīts Deividsons
Emp_Id Emp_Name Emp_Dept Emp_Age
1 Akshay Finanses 23
2 Ram Mārketings 24
3 Balram Pārdošana 25
4 jatin Kodēšana 22
5 Manoj Mārketings 23
6 Sheetal Finanses 24
7 Mati Finanses 22
8 Jogešs Kodēšana 25
9 Naveen Mārketings 22
10 Taruns Finanses 23

Šis SQL vaicājums parāda visu informāciju par darbiniekiem darbinieku vārdu augošā secībā:

 SELECT * FROM Employee_Details ORDER BY Emp_Name; 

Izvade:

Emp_Id Emp_Name Emp_Dept Emp_Age
1 Akshay Finanses 23
3 Balram Pārdošana 25
5 Manoj Mārketings 23
9 Naveen Mārketings 22
7 Mati Finanses 22
2 Ram Mārketings 24
6 Sheetal Finanses 24
10 Taruns Finanses 23
4 jatin Kodēšana 22
8 Jogešs Kodēšana 25

Ja vēlaties augšpusē parādīt tos darbiniekus, kuri strādā Kodēšanas nodaļā, tad šai darbībai CASE priekšrakstā ir jāizmanto viens WHEN un THEN priekšraksts, kā parādīts šajā vaicājumā:

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

Izvade:

Emp_Id Emp_Name Emp_Dept Emp_Age
4 jatin Kodēšana 22
8 Jogešs Kodēšana 25
1 Akshay Finanses 23
3 Balram Pārdošana 25
5 Manoj Mārketings 23
9 Naveen Mārketings 22
7 Mati Finanses 22
2 Ram Mārketings 24
6 Sheetal Finanses 24
10 Taruns Finanses 23