为什么SQL INSERT和UPDATE语句具有不同的语法?

时间:2009-11-09 22:43:21

标签: sql

在考虑this question关于SQL INSERT语句的同时,我想到两个语句之间的语法区别很大程度上是人为的。也就是说,为什么我们不能这样做:

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

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

也许我错过了一些关键的东西。但对于我们这些过去必须连接我们的SQL语句的人来说,使用INSERTUPDATE语句的可比语法会节省大量的编码。

3 个答案:

答案 0 :(得分:6)

他们提供不同的语法功能。在更新中,您指定的过滤器选择要应用更新的一组行。当然,为了相同的目的,该语法与SELECT查询共享。

在INSERT中,您没有选择任何行,而是生成一个需要指定一组值的新行。

在UPDATE中,LHS = RHS的东西是指定一个产生true或false(或者可能是null)的表达式。在INSERT中,VALUES子句是关于赋值的。因此,虽然它们在表面上相似,但它们在语义上完全不同,imho。虽然我编写了一个SQL解析器,但这可能会影响我的观点。 :)

答案 1 :(得分:5)

SQL Server 2008通过MERGE命令引入了UPSERT功能。这是

的逻辑等价物
IF FOUND THEN
 UPDATE
ELSE
 INSERT

答案 2 :(得分:0)

我相信这是你可以在不明确值的情况下制作插入语句。如果要在表中的每一列中放置一个值,则可以写:

插入my_table值(“value1”,2);

而不是:

插入my_table(column1,column2)值(“value1”,2);

导入和导出整个(大型)数据库时,这对于减少文件大小和处理时间非常有用。如今,使用二进制快照等,它可能“不太宝贵”: - )