2009-11-09 12 views
5

this questionについてSQL INSERTの文を考えているうちに、2つの文の間の構文の区別はほとんど人工的であることが私に起こりました。SQL INSERT文とUPDATE文の構文が異なるのはなぜですか?

INSERT INTO MyTable SET Field1=Value1, Field2=Value2, ... 

または

UPDATE MyTable (Field1, Field2 ...) VALUES (Value1, Value2, ...) 
    WHERE some-key = some-value 

おそらく、私は重要な何かが欠けている:それは、なぜ私たちが行うことはできません。しかし、過去にSQL文を連結しなければならなかった私たちのためには、INSERTUPDATEの文に匹敵する構文を持つことで、かなりの量のコーディングが節約されました。

+0

本当に質問= P – ajdams

+0

申し訳ありませんが、これはディスカッションタイプの質問であり、実際にサイトの意図に合っていません。 – jkndrkn

+0

@ajdams - わかりませんでしたが、尋ねることができれば、それはWikiの一部でなければならないと確信していました –

答えて

6

と同等です。さまざまな文法機能を提供しています。更新では、更新を適用する行のセットを選択するフィルターを指定しています。もちろん、構文は同じ目的でSELECTクエリと共有されます。

INSERTでは、行を選択していないため、値のセットを指定する必要がある新しい行を生成しています。

UPDATEでは、LHS = RHSの記述は、真または偽(またはnullの可能性があります)をもたらす式を指定しています。また、INSERTでは、VALUES句は値の代入に関するものです。彼らは表面的には似ていますが、意味的には全く異なっています。私はSQLパーサを書いていますが、私の意見に影響を与える可能性があります。 :)

0

これは、値を明示的に指定せずに挿入ステートメントを作成することができると考えています。テーブルのすべての列に値を入力する場合は、次のように書くことができます。

my_table値( "value1"、2)に挿入します。

代わりに:

MY_TABLEへの挿入(COLUMN1、COLUMN2)の値( "値1"、2)。

大(大)データベース全体をインポートおよびエクスポートする場合、ファイルサイズと処理時間を削減する上で非常に重要です。現在、バイナリスナップショットなどを使用すると、「あまり価値のないもの」になる可能性があります:-)

5

SQL Server 2008はMERGEコマンドでUPSERT機能を導入しました。これは論理的には

IF FOUND THEN 
UPDATE 
ELSE 
INSERT 
関連する問題