SQL中的DELETE和DELETE FROM之间的区别?

时间:2014-03-11 21:17:04

标签: sql tsql sql-delete

有吗?我正在研究一些存储过程,在一个地方我找到了以下行:

DELETE BI_Appointments
WHERE VisitType != (
    SELECT TOP 1 CheckupType
    FROM BI_Settings
    WHERE DoctorName = @DoctorName)

这会做同样的事情:

DELETE FROM BI_Appointments
WHERE VisitType != (
    SELECT TOP 1 CheckupType
    FROM BI_Settings
    WHERE DoctorName = @DoctorName)

或者它是语法错误,还是完全不同的东西?

2 个答案:

答案 0 :(得分:22)

假设这是T-SQL或MS SQL Server,没有区别,语句是相同的。第一个FROM关键字在DELETE语句中在语法上是可选的。

http://technet.microsoft.com/en-us/library/ms189835.aspx

关键字是可选的,原因有两个。

首先,该标准要求条款中的FROM关键字,因此必须符合标准。

其次,虽然关键字是多余的,但这可能不是它可选的原因。我相信它是因为SQL Server允许您在JOIN语句中指定DELETE,并使第一个FROM强制使其变得尴尬。

例如,这是正常删除:

DELETE FROM Employee WHERE ID = @value

这可以缩短为:

DELETE Employee WHERE ID = @value

SQL Server允许您根据另一个带有JOIN

的表进行删除
DELETE Employee
FROM Employee
    JOIN Site
       ON Employee.SiteID = Site.ID
WHERE Site.Status = 'Closed'

如果第一个FROM关键字不是可选的,则上面的第二个查询需要如下所示:

DELETE FROM Employee
FROM Employee
    JOIN Site
       ON Employee.SiteID = Site.ID
WHERE Site.Status = 'Closed'

以上查询完全有效并且确实执行,但这是一个非常难以阅读的查询。很难说它只是一个查询。由于"重复"看起来两个人被捣碎在一起。 FROM条款。

附注:由于没有ORDER BY子句,您的示例子查询可能是不确定的。

答案 1 :(得分:-1)

嗨朋友在oracle数据库中删除和删除没有区别,它是可选的,但这是编写这样的代码的标准 DELETE FROM table [ WHERE condition ] 这是sql-92标准。始终以标准方式开发代码。