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 IN
liを使用> -
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サブクエリの概念と、さまざまなサブクエリタイプを使用してデータをクエリする方法について学習しました。