web-dev-qa-db-ja.com

SQL Serverの入れ子になった選択ステートメント

どうして次のように動作しないのですか?

SELECT name FROM (SELECT name FROM agentinformation)

私は、SQLについての私の理解が間違っていると思います。なぜなら、これは同じことを返すだろうと思ったからです。

SELECT name FROM agentinformation

内側のSELECT文は、外側のSELECT文が問い合わせる結果セットを作成しませんか?

339
Brennan Vincent

副照会を別名にする必要があります。

SELECT name FROM (SELECT name FROM agentinformation) a  

もっと明確に

SELECT a.name FROM (SELECT name FROM agentinformation) a  
587
Joe Stefanelli

回答 Joe Stefanelliによる提供はすでに正しいです。

SELECT name FROM (SELECT name FROM agentinformation) as a  

クエリにはサブクエリのエイリアスを作成することで得られるテーブルオブジェクトが必要なので、サブクエリのエイリアスを作成する必要があります。概念的には、副照会の結果は外部照会に代入されます。外側のクエリにテーブルオブジェクトが必要なので、内側のクエリのエイリアスを作成する必要があります。

副照会を含むステートメントは通常、次のいずれかの形式を取ります。

  • WHERE式[NOT] IN(サブクエリ)
  • WHERE式の比較演算子[ANY | WHERE] ALL](副問合せ)
  • WHERE [NOT] EXISTS(サブクエリ)

サブクエリルール および サブクエリタイプ /を確認してください。

その他の例 入れ子になった副問い合わせの/。

  1. IN/NOT IN - この演算子は、内部クエリが実行された後に内部クエリの出力を取得します。これは0以上の値で、それを外部クエリに送信することができます。次に、外部照会は、一致する[IN operator]または一致しない[NOT IN operator]行をすべて取り出します。

  2. ANY - [> ANYまたはANY演算子は、内部クエリによって生成された値のリストを取得し、そのリストの最小値よりも大きいすべての値を取り出します。の

例えば> ANY(100,200,300)の場合、ANY演算子は100より大きいすべての値を取り出します。

  1. ALL - [> ALLまたはALL演算子は、内部クエリによって生成された値のリストを取得し、そのリストの最大値よりも大きいすべての値を取り出します。の

例えば> ALL(100,200,300)の場合、ALL演算子は300を超えるすべての値を取り出します。

  1. EXISTS - EXISTSキーワードはブール値[TRUE/FALSE]を生成します。このEXISTSはサブクエリによって返された行の存在をチェックします。
35
Somnath Muluk