SQL
 Computer >> コンピューター >  >> プログラミング >> SQL

SQLケース

データベースを操作しているときは、 if / thenを実行することをお勧めします クエリでの操作。たとえば、従業員のリストを調べて、彼らが1年以上あなたと一緒に働いている場合は、保護観察のステータスを変更したい場合があります。または、リーダーボードのプレーヤーのリストを調べて、上位3位にランクインしている場合は勝者としてマークすることもできます。

これらの操作をSQLで実行するには 、 CASEを使用する必要があります 声明。 SQL CASE ステートメントを使用すると、 if / thenを実行できます if / thenを実行する方法と同様の操作 MicrosoftExcelでの手順。

このガイドでは、 SQL CASEの基本を説明します。 ステートメントを作成し、クエリでどのように使用できるかについて話し合います。また、複数の SQL CASEの使用方法についても説明します。 ステートメント、および CASEの方法を探る 集計関数で使用できます。

クエリリフレッシャー

データベースから情報を取得するには、クエリを作成する必要があります。ほとんどの場合、クエリは SELECTで始まります ステートメント。これは、クエリによって返される列をデータベースに通知するために使用されます。クエリには通常、 FROMも含まれます 句。これは、操作が検索するテーブルをデータベースに通知します。

SQLでのクエリの構文は次のとおりです :

SELECT column_name FROM table_name WHERE conditions_are_met;

例を使用して、これが実際に動作していることを説明しましょう。これは、従業員のすべての従業員の名前を返すクエリです。 表:

SELECT name FROM employees;

クエリは結果を返します:

名前
ルーク
マイク
ハンナ
ジェフ
アレクシス
エマ
ジョナ
アダム

(8行)

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

複数の列を取得する場合は、名前を1つの列で区切ることで取得できます。または、すべての列に関する情報を収集する場合は、アスタリスク( * )を使用できます。 )演算子。 SQLのすべての列を表します テーブル。

さらに、特定の条件セットに基づいてレコードをフィルタリングする場合は、 WHEREを使用できます。 句。会社のアルバニー支店に拠点を置くすべての従業員の名前を見つけるクエリの例を次に示します。

SELECT name FROM employees WHERE branch = 'Albany';

クエリの結果は次のとおりです。

名前
エマ
ジョナ

(2行)

これらはすべて比較的単純なクエリです。しかし、 if / thenを実行したい場合はどうでしょうか。 クエリを実行しているときの操作?ここでSQL CASE ステートメントが役立つ場合があります。

SQLケース

CASE ステートメントはSQLで使用できます if / thenを定義する コード内のロジック。たとえば、5年以上ビジネスに携わってきたすべての従業員に昇給を提供したい場合は、 CASEを使用できます。 ステートメント。

SQL CASEの構文は次のとおりです ステートメント:

SELECT column1_name
	CASE WHEN column2_name = 'X' THEN 'Y'
		ELSE NULL END AS column3_name
	FROM table_name;

このクエリでは多くのことが行われているので、例を使用してどのように機能するかを説明しましょう。すべての従業員に5人以上の今月の従業員を提供したいとします。 $200のレイズを授与します。これがSQLです その目標を達成できるステートメント:

SELECT name,
	CASE WHEN employee_month_awards > 5 THEN 200
		ELSE NULL END AS pending_raise
	FROM employees;

クエリは、検索されたケース式から次を返します。

名前 pending_raise
ルーク
マイク
ハンナ
ジェフ
アレクシス
エマ 200
ジョナ
アダム 200

(8行)

これを分解しましょう。 CASE ステートメントは各レコードをチェックし、条件ステートメント、従業員月間賞> 5かどうかを評価します 、本当です。条件ステートメントがtrueの場合、値 200 pending_raiseに出力されます 桁。条件ステートメントがfalseの場合、null値が残ります。

最後に、クエリは従業員名のリストと、それらの従業員の保留中の昇給を返します。

SQL CASEに注意することが重要です ステートメントは、テーブルに新しい列を追加しません。むしろ、 SELECTに列を作成します クエリ出力 、昇給の対象者を確認できるようにします。

さらに、昇給の資格がないすべての人にを与えたい場合 昇給が保留中の場合、を指定できます NULLの代わりに ELSEで 声明。 ORDER BYを使用することもできます データを特定の順序で表示したい場合は、ステートメントを並べ替える句。

SQLCASEと複数の条件

CASE ステートメントは、同じクエリで複数回使用できます。 3つ以上の賞を受賞したすべての従業員に50ドルの昇給を与え、5つ以上の賞を受賞したすべての従業員に200ドルの昇給を与えたい場合は、次のステートメントを使用できます。

SELECT name,
	CASE WHEN employee_month_awards > 5 THEN 200
		WHEN employee_month_awards > 3 THEN 50
		ELSE 0 END AS pending_raise
	FROM employees;

クエリの出力は次のとおりです。

名前 pending_raise
ルーク 50
マイク
ハンナ
ジェフ
アレクシス
エマ 200
ジョナ 50
アダム 200

(8行)

この例では、 CASE ステートメントは、記述された順序で評価されます。

したがって、私たちのクエリは最初に5つ以上の賞を持っている人をチェックし、保留中の昇給を 200に設定します。 。次に、クエリは3つ以上の賞を持っている人をチェックし、保留中の昇給を 50に設定します。 。最後に、従業員がいずれの基準も満たさない場合、保留中の昇給はに設定されます 。

ただし、このコードの方が効率的です。プログラムが機能するようにステートメントを特定の順序で記述するのではなく、重複しないステートメントを記述する必要があります。上記と同じように機能するが、 ANDを使用するクエリの例を次に示します。 従業員が獲得した賞の数を確認するためのステートメント:

SELECT name,
	CASE WHEN employee_month_awards >= 3 AND employee_month_awards <= 5 THEN 50
		WHEN employee_month_awards > 5 THEN 200
		ELSE 0 END AS pending_raise
	FROM employees;

私たちのクエリは、上記のクエリと同じものを返します。ただし、これは CASEの順序に依存しません ステートメント。つまり、誤ったステートメントで間違いを犯す可能性が低くなります。

SQLCASEおよび集計関数

CASEを使用することもできます 集計関数を使用します。これは、特定の条件を満たす行のみをカウントする場合に役立ちます。たとえば、200ドルのボーナスを獲得した従業員の数を知りたい場合は、 CASEを使用できます。 集計関数を使用します。

CASEを使用するための構文は次のとおりです 集計関数を使用する場合:

SELECT column1_name
	CASE WHEN column2_name = 'X' THEN 'Y'
		ELSE NULL END AS column3_name,
		COUNT(1) AS count
	FROM table_name
GROUP BY column3_name;

例を使用して、これがどのように機能するかを説明しましょう。 50ドル以上のボーナスを受け取る資格のある従業員の数を調べたいとします。次のクエリを使用して、この情報を取得できます。

SELECT 
	CASE WHEN employee_month_awards >= 3 AND employee_month_awards <= 5 THEN 50
		WHEN employee_month_awards > 5 THEN 200
		ELSE 0 END AS pending_raise,
		COUNT(1) AS count
	FROM employees
GROUP BY pending_raise;

クエリは次を返します:

pending_raise カウント
50 3
3
200 2

ご覧のとおり、クエリは、従業員が獲得した保留中の昇給のリストと、従業員が支払うべき各タイプの昇給の数を返しました。この場合、3人の従業員は50ドルの昇給、3人の従業員は昇給なし、2人の従業員は200ドルの昇給が必要です。

結論

このチュートリアルでは、 SQLの基本を説明しました。 サーバーCASE ステートメントと、それを使用して if / thenを実装する方法について説明しました クエリのロジック。 CASEについても説明しました 複数の条件と集計関数で使用できます。

念のため、すべての単純な CASE 式は次のルールに従う必要があります:

  • ケース ステートメントはSELECTに含まれている必要があります 条項;
  • ケース ステートメントにはWHENを含める必要があります 、 THEN 、および END コンポーネント;
  • 複数のWHEN ステートメントとELSE 句はオプションで使用できます;
  • ANDなどの条件ステートメント またはまたは CASEで使用できます WHEN間のクエリ およびTHEN 条項。

これで、 CASEを使用するために必要な知識を身に付けることができます。 SQLのようなステートメント プロフェッショナル!


  1. MicrosoftSQLServerクエリストア

    Microsoft®SQLServer®クエリストアは、その名前が示すように、実行されたクエリのデータベース履歴、クエリの実行時実行統計、および実行プランをキャプチャするストアのようなものです。データはディスクに保存されるため、トラブルシューティングの目的でいつでもクエリストアデータを取得できます。SQLServerを再起動してもデータに影響はありません。 SQL Server 2016で導入され、以降のすべてのエディションで利用できるクエリストアを使用して、クエリプランの変更によって引き起こされるパフォーマンスの問題をトラブルシューティングします。 はじめに ベースラインデータ分析はパフォ

  2. SQL検疫

    このブログ投稿では、SQL検疫の概念を紹介しています。 Oracle®ResourceManagerを使用すると、CPUやI/Oなどのリソースの使用を規制および制限できます。最も興味深い事実は、定義されたしきい値を超える長時間実行クエリの実行を防ぐことができるということです。 SQL検疫とは何ですか? 検疫とは隔離を意味します。 SQL検疫は、暴走クエリのオーバーヘッドを排除するために使用できるバージョン19cの機能です。暴走クエリは、リソースまたはランタイムの制限を超え、リソース、CPU、およびIOの多くを使用するため、ResourceManagerによって終了されるクエリです。 この