SQLServerサブクエリ
概要:このチュートリアルでは、SQL Serverサブクエリと、サブクエリを使用してデータをクエリする方法について学習します。
SQLServerサブクエリの概要
サブクエリは、SELECT、INSERTなどの別のステートメント内にネストされたクエリです。 UPDATE、またはDELETE。
次の例を見てみましょう。
<を検討してください。サンプルデータベースのdivid = "9d37f58444">
テーブルとcustomersテーブル。
次のステートメントは、WHERE句でサブクエリを使用する方法を示しています。 New Yorkにある顧客の販売注文を検索するためのdivid = “3eb7f9a1d0″>
ステートメント:
結果は次のとおりです:
この例では、次のステートメントはサブクエリです。
Code language: SQL (Structured Query Language) (sql)
常にSELECT括弧内のサブクエリのクエリ()。
サブクエリは内部クエリまたは内部選択とも呼ばれ、サブクエリを含むステートメントは外部選択または外部クエリ:
SQLサーバーは、上記のクエリ例全体を次のように実行します。
最初に、サブクエリを実行して、New Yorkにある顧客の顧客識別番号のリストを取得します。
Code language: SQL (Structured Query Language) (sql)
次に、SQLServerはサブクエリによって返された顧客ID番号をIN演算子に置き換え、外部クエリを実行して最終結果セットを取得します。
できる限りee、サブクエリを使用することで、2つのステップを組み合わせることができます。サブクエリを使用すると、顧客識別番号を選択して外部クエリにプラグインする必要がなくなります。さらに、顧客データが変更されるたびにクエリ自体が自動的に調整されます。
サブクエリのネスト
サブクエリは別のサブクエリ内にネストできます。 SQL Serverは、最大32レベルのネストをサポートします。次の例について考えてみます。
まず、 SQL Serverは、次のサブクエリを実行して、StriderおよびTrekブランドのブランド識別番号のリストを取得します。
次に、SQLServerは所属するすべての製品の平均価格リストを計算します
Code language: SQL (Structured Query Language) (sql)
3番目に、SQL Serverは、またはTrekブランド。
SQLServerサブクエリの種類
サブクエリはさまざまな場所で使用できます:
- 式の代わりに
-
INまたはNOT INliを使用> -
ANYまたはALL -
EXISTSまたはNOT EXISTS -
UPDATE、DELETEでは、またはINSERTステートメント -
FROM句内
SQLServerサブクエリ式の代わりにが使用されます
サブクエリが単一の値を返す場合、式が使用されている場所であればどこでも使用できます。
次の例では、サブクエリはSELECTステートメントのmax_list_priceという名前の列式。
SQLServerサブクエリはIN演算子で使用されます
IN演算子は、0個以上の値のセットを返します。サブクエリが値を返した後、外部クエリはそれらを利用します。
次のクエリは、バイクストアが販売するすべてのマウンテンバイクとロードバイク製品の名前を検索します。
このクエリは2つのステップで評価されます。
- 最初に、内部クエリは、
Mountain Bikesおよびcodeロードバイクの名前に一致するカテゴリ識別番号のリストを返します。 - 次に、これらの値は、カテゴリ識別番号がリスト内の値の1つと一致する製品名を見つける外部クエリに代入されます。
SQLServerサブクエリはANY演算子で使用されます
サブクエリはANY演算子で導入されます。構文は次のとおりです。
Code language: SQL (Structured Query Language) (sql)
サブクエリが値v1、v2、…vnのリストを返すと仮定します。 ANY演算子は、比較ペア(scalar_expression、vi)の1つが評価した場合、TRUEを返します。 TRUEへ;それ以外の場合は、FALSEを返します。
たとえば、次のクエリは、定価が任意の商品ブランドの平均定価以上の商品を検索します。 。
ブランドごとに、サブクエリ最大定価を見つけます。外側のクエリはこれらの最大価格を使用して、個々の製品の定価がブランドの最大定価以上であるかどうかを判断します。
SQLServerサブクエリはALL演算子で使用されます
ALL演算子の構文はANY演算子と同じです:
Code language: SQL (Structured Query Language) (sql)
ALL演算子は、すべての比較ペア(scalar_expression、vi)が次のように評価した場合、TRUEを返します。 TRUE;それ以外の場合は、FALSEを返します。
次のクエリは、サブクエリによって返される平均定価以上の定価の製品を検索します。
SQLServerサブクエリはEXISTSで使用されるかどうかEXISTS
以下は、EXISTS演算子で導入されたサブクエリの構文を示しています。
Code language: SQL (Structured Query Language) (sql)
サブクエリが結果を返す場合、EXISTS演算子はTRUEを返します。それ以外の場合は、FALSEを返します。
一方、NOT EXISTSは演算子。
次のクエリは、2017年に製品を購入した顧客を検索します。
EXISTS divの代わりにNOT EXISTSを使用する場合>、2017年に製品を購入しなかった顧客を見つけることができます。
FROM句のSQLServerサブクエリ
すべての営業スタッフの注文の合計の平均を求めたいとします。これを行うには、最初にスタッフによる注文数を確認できます:
次に、AVG()関数をこの結果セットに適用できます。クエリは仮想テーブルのような結果セットを返すため、クエリ全体を次のような別のクエリのFROM句に配置できます。
FROM句にはテーブルエイリアスが必要です。この例では、サブクエリのテーブルエイリアスとしてtを使用しました。最終結果を出すために、SQLServerは次の手順を実行します。
-
FROM句でサブクエリを実行します。 - サブクエリの結果を使用して、外部クエリを実行します。
このチュートリアルでは、SQL Serverサブクエリの概念と、さまざまなサブクエリタイプを使用してデータをクエリする方法について学習しました。