INSERTとINSERTINTO


90

私はMSSQLでT-SQLを使用してしばらくの間、テーブルにデータを挿入する必要があるときはいつでも、構文を使用する傾向があります。

INSERT INTO myTable <something here>

INTOここではキーワードはオプションであり、使用する必要はないことを理解していますが、私の場合はどういうわけか習慣になりました。

私の質問は:

  • INSERT構文とを使用することの意味はありますINSERT INTOか?
  • どれが標準に完全に準拠していますか?
  • それらは両方ともSQL標準の他の実装で有効ですか?

回答:


94

INSERT INTOが標準です。にもかかわらずINTOほとんどの実装ではオプションであり、それはあなたのコードがポータブルであることを確認するためにそれを含めることをお勧めします、少数では必須です。

SQL標準のいくつかのバージョンへのリンクはここにありますここで古い標準のHTMLバージョンを見つけました。


2
「SQL-99Complete、Really」という本は、Sybase(したがってMS SQL Server)が非標準的な方法で動作し、INTOをオプションにすることができると述べています。他のブランドのデータベースにはキーワードが必要です。
ビルカーウィン

2
正しい。INTOを常に使用する場合は、どのINTOをオプションと見なすかを覚えておく必要はありません。すべての実装で使用できます。
トカゲのビル

21

これらは同じものでINTOあり、T-SQLでは完全にオプションです(他のSQLダイアレクトは異なる場合があります)。

他の答えとは逆に、使用すると読みやすさが損なわれると思いますINTO

これは概念的なことだと思います。私の認識では、「Customer」という名前のテーブルにを挿入していませんが、Customerを挿入しています。(これは、テーブルに複数形ではなく単数形で名前を付けるために使用するという事実に関連しています)。

あなたが最初の概念に従うならば、あなたINSERT INTO Customerにとっておそらく「正しいと感じる」でしょう。

あなたが2番目の概念に従うならば、それはおそらくINSERT Customerあなたのためでしょう。


5
あなたのアプローチのリスクは、新しいプログラマーがオブジェクトとテーブルを混同する可能性があることだと思います。
Dave DuPlantis 2008年

12
あなたの答えは事実上正しいです。人々が反対の見解に反対票を投じるのは残念です。SOのメリットの1つは、それらの異なる意見を聞くことだと思います。
DOK

オブジェクトやテーブルで考えることは問題ではありません。実体関連モデルとして概念的に考えています。
アンドレフィゲイレド2017

@DaveDuPlantisああ、ジャッキーツリーホーンの誤謬。+1
ラフィン2017年

10

mySQLではオプションの場合がありますが、Oracleなどの他のDBMSでは必須です。したがって、SQLは、その価値のために、INTOキーワードを使用してより移植性が高くなる可能性があります。


4

この問題について私が学んだ教訓の1つは、常に一貫性を保つ必要があるということです。INSERT INTOを使用する場合は、INSERTも使用しないでください。そうしないと、プログラマーの中には同じ質問をもう一度する人もいます。

別の関連する例を次に示します。MSSQL2005で非常に長いストアドプロシージャを更新する機会がありました。問題は、結果テーブルに挿入されたデータが多すぎることです。データがどこから来たのかを知る必要がありました。新しいレコードが追加された場所を見つけようとしました。SPの最初のセクションで、いくつかのINSERTINTOを見ました。次に、「INSERT INTO」を見つけて更新しようとしましたが、「INSERT」のみが使用されている場所を1つ見逃しました。それは実際にいくつかの列に4k以上の空のデータを挿入しました!もちろん、INSERTを検索するだけです。しかし、それは私に起こりました。私は前のプログラマーIDIOTを非難します:) :)


作者がINSERTINTOで作成したようで、メンテナンスにINSERTを入れた人もいます。残念ながら、それは「すべき」よりもはるかに多く発生します。
アンドレフィゲイレド2017

3

SQL Server 2005では、INSERTとINTOの間に次のようなものを含めることができます。

INSERT top(5)INTO tTable1 SELECT * FROM tTable2;

INTOがなくても機能しますが、読みやすくするためにINTOを使用することをお勧めします。


1

どちらも同じことをします。INTOは(SQL ServerのT-SQLでは)オプションですが、読みやすくなります。


0

私はそれを使うのが好きです。それはのように、SQL言語の他の部分と同じ構文描写感と読みやすさを維持しgroup BYorder BY


0

ORACLEでSQLを作成し始めたので、INTOのないコードを見ると、「壊れている」ように見え、混乱します。

はい、それは私の意見であり、常にINTOを使用する必要があると言っているわけではありません。ただし、特に新しい実装でスクリプトを開始していない場合は、他の多くの人がおそらく同じことを考えることを知っておく必要があります。

SQLでは、オブジェクトを操作するのではなく、テーブルに行を追加していることを認識することも非常に重要だと思います。SQLテーブルの行/エントリをオブジェクトと考えることは、新しい開発者にとっては役に立たないと思います。繰り返しますが、私だけの意見です。


0

可能な場合は、標準機能を使用してください。特定のデータベースに移植性が必要なわけではありませんが、SQLの知識に移植性が必要になる可能性があります。特に厄介なT-SQLの例は、isnullの使用です。coalesceを使用してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.