2017-02-28 5 views
2

SQLには新しく、かなり基本的な和集合に関するすべてのステートメントに関する一般的な質問がありました。私は次のようなコードを見ています:基本的なSQL共用体をすべてtmpとして

select * 
into ConsolidatedTable 
from 
    (select * from Table1 
    union all 
    select * from Table2 
    union all 
    select * from Table3) as tmp; 

「as tmp」は必要ですか?もしそうなら、なぜですか?

ありがとうございます!

+0

これはエイリアスです。あなたはあなたの選択の任意の名前を与えることができます..それはまたDaveになることができますしかし、あなたはエイリアスを確かに与える必要があります –

+0

ありがとうShakeerが、それは必要ですか? 'as tmp'がないとどうなりますか? – Dave

+0

は '誤った構文の近く 'というエラーをスローします)。 –

答えて

2

SQL Serverの場合、エイリアスはで、インラインビューではが必要です。エイリアスを省略すると、SQL Serverはエラーをスローします。

エイリアスの前のキーワードASはオプションであり、必須ではありません。

(私の個人的な好みは、テーブル/ビューの別名ためASキーワードを省略することで、常に列エイリアスのASキーワードを含むこと。)


テーブル/ビュー別名のASキーワードは任意ですSQL Serverで。 (Oracleなどの)一部のデータベースでは、テーブルまたはビューのエイリアスの前にASキーワードを受け入れず、含まれている場合はエラーをスローします(ANSI SQL標準の一部ではありません)。

MySQLおよびSQL Server などの一部のデータベースでは、エイリアスをインラインビューに割り当てる必要があります。ではなくのデータベースでは、インラインビュー(Oracleなど)でエイリアスを許可するエイリアスが必要で、エイリアスが割り当てられているため、外部クエリで列参照を修飾できます。限定列参照は通常のパターンなので、インラインビューにエイリアスを割り当てることは、それを必要としないデータベースに対しても通常のパターンです。

エイリアスの割り当ては、とは無関係で、とインラインビューのクエリではUNION ALLです。

+0

が得られたので、最後のコード行は単純に次のようになります。select * from Table3)tmp? – Dave

+0

@Dave yes、正確に。そのパターンは、SQL Server、Oracle、MySQLなどで一貫して追跡できます。 – spencer7593

1

tmpはエイリアスと呼ばれます。それ以外の場合は、インラインビューの列(すべてのコードが括弧書きで囲まれている)が残りのクエリで「到達不能」になるため、参照できないため必須です。

任意の名前を付けることができます。詳細については、あとで参照してください。

あなたの最後の質問に答えるには、「as tmp」が必要ですか? - これはSQLサーバーなので、 'as'を除いてエイリアス名を直接書くことができます - ) tmpで十分です。

+0

ありがとう!非常に明確な説明。 – Dave

関連する問題