の 場合 if-then-else タイプの論理クエリを操作するステートメントです。このステートメントは、指定された条件が True と評価された場合の値を返します。 True と評価される条件がない場合は、ELSE 部分の値を返します。
ELSE 部分がなく、True と評価される条件がない場合は、NULL 値を返します。
構造化照会言語では、CASE ステートメントは、次の 3 つの句を含む SELECT、INSERT、および DELETE ステートメントで使用されます。
- WHERE句
- ORDER BY句
- GROUP BY 句
SQL のこのステートメントの後には、常に少なくとも 1 組の WHEN ステートメントと THEN ステートメントが続き、常に END キーワードで終わります。
リレーショナル データベースの CASE ステートメントには 2 つのタイプがあります。
文字列から整数Javaに変換します
- 単純な CASE ステートメント
- 検索された CASE ステートメント
SQLのCASE文の構文
CASE WHEN condition_1 THEN statement_1 WHEN condition_2 THEN statement_2 ……. WHEN condition_N THEN statement_N ELSE result END;
ここで、CASE ステートメントは各条件を 1 つずつ評価します。
式が最初の WHEN 句の条件と一致する場合、それ以降の WHEN 条件と THEN 条件をすべてスキップし、結果としてstatement_1 を返します。
式が最初の WHEN 条件と一致しない場合は、2 番目の WHEN 条件と比較されます。この一致プロセスは、式がいずれかの WHEN 条件と一致するまで継続されます。
xdの意味
式と一致する条件がない場合、コントロールは自動的に ELSE 部分に進み、その結果を返します。 CASE 構文では、ELSE 部分はオプションです。
構文では、CASE と END は CASE ステートメントの始まりと終わりを示す最も重要なキーワードです。
SQLのCASE文の例
Student_Details テーブルを考えてみましょう。このテーブルには、学生の roll_no、名前、マーク、科目、市区町村が含まれています。
ロール番号 | Stu_Name | スチュ_件名 | Stu_Marks | ステューシティ |
---|---|---|---|---|
2001年 | アクシャイ | 科学 | 92 | ノイダ |
2002年 | ラム | 数学 | 49 | ジャイプール |
2004年 | シャム | 英語 | 52 | グルガオン |
2005年 | ヤティン | いいえ | 4つ。 | ラクナウ |
2006年 | マノージ | コンピューター | 70 | ガーズィヤーバード |
2007年 | シータル | 数学 | 82 | ノイダ |
2008年 | 髪 | 科学 | 62 | グルガオン |
2009年 | ヨゲシュ | 英語 | 42 | ラクナウ |
2010年 | ラム | コンピューター | 88 | デリー |
2011年 | シャム | いいえ | 35 | カンプール |
例 1: 次の SQL ステートメントは、CASE ステートメントに対して 1 つの WHEN 条件と 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;
上記のクエリの説明:
ここで、CASE ステートメントは、 Stu_Marks 50 以上の場合、返されます。 学生_合格 それ以外の場合は、に移動します それ以外 一部と返品 学生_不合格 の中に 学生_結果 カラム。
出力:
数値を文字列Javaに変換
ロール番号 | Stu_Name | スチュ_件名 | Stu_Marks | 学生_結果 |
---|---|---|---|---|
2001年 | アクシャイ | 科学 | 92 | 学生_合格 |
2002年 | ラム | 数学 | 49 | 学生_不合格 |
2004年 | シャム | 英語 | 52 | 学生_合格 |
2005年 | ヤティン | いいえ | 4つ。 | 学生_不合格 |
2006年 | マノージ | コンピューター | 70 | 学生_合格 |
2007年 | シータル | 数学 | 82 | 学生_合格 |
2008年 | 髪 | 科学 | 62 | 学生_合格 |
2009年 | ヨゲシュ | 英語 | 42 | 学生_不合格 |
2010年 | ラム | コンピューター | 88 | 学生_合格 |
2011年 | シャム | いいえ | 35 | 学生_不合格 |
例 2: 次の SQL ステートメントは、CASE ステートメントに複数の WHEN 条件と THEN 条件を追加します。
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>
出力:
Emp_Id | 従業員名 | 従業員部門 | 合計_給与 | emp_備考 |
---|---|---|---|---|
1 | アクシャイ | ファイナンス | 17000 | インクリメント |
2 | ラム | マーケティング | 9000 | デクリメント |
3 | シャム | 販売 | 10000 | インクリメント |
4 | ヤティン | コーディング | 12000 | インクリメント |
5 | マノージ | マーケティング | 8000 | デクリメント |
例 4: この例では、SQL の CASE ステートメントで ORDER BY 句を使用します。
画像をCSSで揃える
Emp_ID、Emp_Name、Emp_Dept、および Emp_Age を含む別の Employee_Details テーブルを考えてみましょう。
SQL で次のクエリを使用して、Employee_Details のデータを確認できます。
Select * From Employee_Details;
出力:
Emp_Id | 従業員名 | 従業員部門 | 従業員の年齢 |
---|---|---|---|
1 | アクシャイ | ファイナンス | 23 |
2 | ラム | マーケティング | 24 |
3 | バラム | 販売 | 25 |
4 | ヤティン | コーディング | 22 |
5 | マノージ | マーケティング | 23 |
6 | シータル | ファイナンス | 24 |
7 | 髪 | ファイナンス | 22 |
8 | ヨゲシュ | コーディング | 25 |
9 | ナヴィーン | マーケティング | 22 |
10 | タルン | ファイナンス | 23 |
次の SQL クエリは、従業員名の昇順で従業員のすべての詳細を表示します。
SELECT * FROM Employee_Details ORDER BY Emp_Name;
出力:
Emp_Id | 従業員名 | 従業員部門 | 従業員の年齢 |
---|---|---|---|
1 | アクシャイ | ファイナンス | 23 |
3 | バラム | 販売 | 25 |
5 | マノージ | マーケティング | 23 |
9 | ナヴィーン | マーケティング | 22 |
7 | 髪 | ファイナンス | 22 |
2 | ラム | マーケティング | 24 |
6 | シータル | ファイナンス | 24 |
10 | タルン | ファイナンス | 23 |
4 | ヤティン | コーディング | 22 |
8 | ヨゲシュ | コーディング | 25 |
コーディング部門で働く従業員を最上位に表示したい場合は、次のクエリに示すように、この操作では CASE ステートメントで 1 つの WHEN ステートメントと THEN ステートメントを使用する必要があります。
c 文字列の配列
SELECT * FROM Employee_Details ORDER BY CASE WHEN Emp_Dept = 'Coding' THEN 0 ELSE 1 END, Emp_Name;
出力:
Emp_Id | 従業員名 | 従業員部門 | 従業員の年齢 |
---|---|---|---|
4 | ヤティン | コーディング | 22 |
8 | ヨゲシュ | コーディング | 25 |
1 | アクシャイ | ファイナンス | 23 |
3 | バラム | 販売 | 25 |
5 | マノージ | マーケティング | 23 |
9 | ナヴィーン | マーケティング | 22 |
7 | 髪 | ファイナンス | 22 |
2 | ラム | マーケティング | 24 |
6 | シータル | ファイナンス | 24 |
10 | タルン | ファイナンス | 23 |
60>