小编典典

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

sql

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

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)

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


阅读 449

收藏
2021-04-07

共1个答案

小编典典

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

http://technet.microsoft.com/zh-
CN/library/ms189835.aspx

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

首先,该标准要求FROM在子句中使用关键字,因此必须遵守该关键字才能符合标准。

其次,尽管关键字是多余的,但这可能不是为什么它是可选的。我相信这是因为SQL Server允许您JOINDELETE语句中指定a
,而将第一个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子句,因此示例子查询可能不确定。

2021-04-07