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:
- KUR klauzula
- PASŪTĪJUMS PĒC klauzulas
- 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:
- Vienkāršs CASE paziņojums
- 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 | Nē | Č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 | Nē | 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 | Nē | Č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 | Nē | 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 >= 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>
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 = 'Coding' 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 |
60>