2009-11-09 77 views
5

在考慮this question關於SQL INSERT聲明時,我想到兩種聲明在語法上的區別主要是人爲的。也就是說,我們爲什麼不能做:爲什麼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 2009-11-09 22:46:50

+0

抱歉,這是一個討論型的問題,並不真正適合網站的意圖。 – jkndrkn 2009-11-09 22:47:33

+0

@ajdams - 我不知道,但我相信,如果它可以在所有被要求,它應該是維基 – 2009-11-09 22:48:37

回答

6

它們提供不同的語法功能。在更新中,您將指定一個篩選器,用於選擇要應用更新的一組行。當然,爲了相同的目的,該語法與SELECT查詢共享。

在INSERT中,您沒有選擇任何行,您正在生成一個需要指定一組值的新行。

在更新中,LHS = RHS的東西是指定其產生真或假的(或也許空:)和在INSERT的表達式,VALUES子句是大約的值分配。所以雖然它們表面上相似,但它們在語義上完全不同,恕我直言。雖然我寫了一個SQL解析器,所以可能會影響我的觀點。 :)

0

我相信這樣做是爲了讓你可以做一個插入語句,而不需要明確的值。如果您在表中的每一單個列放一個值,你可以這樣寫:

INSERT INTO my_table的值(「值1」,2);代替

插入到MY_TABLE(列1,列2)的值( 「值1」,2);

導入和導出整個(大)的數據庫的情況下,這是非常寶貴的削減文件大小和處理時間。如今,隨着形式的快照之類的,也可能是「無價的少」 :-)

5

的SQL Server 2008已經通過MERGE命令介紹UPSERT功能。這是邏輯等效的

IF FOUND THEN 
UPDATE 
ELSE 
INSERT