web-dev-qa-db-ja.com

INSERT vs INSERT INTO

私は現在、MS SQLでT-SQLを使用しており、テーブルにデータを挿入する必要があるときはいつでも、構文を使用する傾向があります。

INSERT INTO myTable <something here>

キーワードINTOはここではオプションであり、使用する必要はありませんが、私の場合は何らかの形で習慣になりました。

私の質問は:

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

INSERT INTOが標準です。 INTOはほとんどの実装ではオプションですが、いくつかでは必須であるため、コードを移植可能にするために含めることをお勧めします。

SQL標準の複数のバージョンへのリンクを見つけることができます こちら 。古い標準のHTMLバージョン here を見つけました。

86
Bill the Lizard

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

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

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

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

2番目の概念に従えば、INSERT Customer あなたのために。

20
Tomalak

MySQLではオプションの場合もありますが、Oracleなどの一部のDBMSでは必須です。そのため、SQLは、INTOキーワードを使用することで、その価値をさらに高めることができます。

10
Tony Andrews

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

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

4
David.Chu.ca

SQL Server 2005では、INSERTとINTOの間に次のようなものがあります。

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

INTOがなくても動作しますが、読みやすくするためにINTOを使用することを好みます。

3
devXen

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

1
DOK

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

0
Tom

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

はい、それは単なる私の意見であり、私はあなたとは言いませんshould常にINTOを使用します。しかし、他の多くの人々がおそらく同じことを考えていることを知っておくべきではありません。特に、新しい実装でスクリプトを作成していない場合はそうです。

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

0
Garry_G

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

0
AgentThirteen