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

问题描述 投票:9回答:2

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

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)

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

sql tsql sql-delete
2个回答
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
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.