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
のようなステートメント プロフェッショナル!
-
MicrosoftSQLServerクエリストア
Microsoft®SQLServer®クエリストアは、その名前が示すように、実行されたクエリのデータベース履歴、クエリの実行時実行統計、および実行プランをキャプチャするストアのようなものです。データはディスクに保存されるため、トラブルシューティングの目的でいつでもクエリストアデータを取得できます。SQLServerを再起動してもデータに影響はありません。 SQL Server 2016で導入され、以降のすべてのエディションで利用できるクエリストアを使用して、クエリプランの変更によって引き起こされるパフォーマンスの問題をトラブルシューティングします。 はじめに ベースラインデータ分析はパフォ
-
SQL検疫
このブログ投稿では、SQL検疫の概念を紹介しています。 Oracle®ResourceManagerを使用すると、CPUやI/Oなどのリソースの使用を規制および制限できます。最も興味深い事実は、定義されたしきい値を超える長時間実行クエリの実行を防ぐことができるということです。 SQL検疫とは何ですか? 検疫とは隔離を意味します。 SQL検疫は、暴走クエリのオーバーヘッドを排除するために使用できるバージョン19cの機能です。暴走クエリは、リソースまたはランタイムの制限を超え、リソース、CPU、およびIOの多くを使用するため、ResourceManagerによって終了されるクエリです。 この