logo

SQL ケース

場合 if-then-else タイプの論理クエリを操作するステートメントです。このステートメントは、指定された条件が True と評価された場合の値を返します。 True と評価される条件がない場合は、ELSE 部分の値を返します。

ELSE 部分がなく、True と評価される条件がない場合は、NULL 値を返します。

構造化照会言語では、CASE ステートメントは、次の 3 つの句を含む SELECT、INSERT、および DELETE ステートメントで使用されます。

  1. WHERE句
  2. ORDER BY句
  3. GROUP BY 句

SQL のこのステートメントの後には、常に少なくとも 1 組の WHEN ステートメントと THEN ステートメントが続き、常に END キーワードで終わります。

リレーショナル データベースの CASE ステートメントには 2 つのタイプがあります。

文字列から整数Javaに変換します
  1. 単純な CASE ステートメント
  2. 検索された 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 &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_備考
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 = &apos;Coding&apos; 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