在SQL中删除语句

时间:2014-09-05 11:16:51

标签: sql sql-delete

我有这些表格:

  • Accountaccount-number (PK), branch-name (FK), balance
  • Branchbranch-name (PK), branch-city, assets

有人可以解释一下以下两个陈述之间的区别是什么?我在我的数据库中执行了它们,并且删除的行的结果是相同的。我错过了什么吗?

delete from account
where [branch-name] = 'London'

delete from account
where [branch-name] in (select [branch-name]
                        from branch
                        where [branch-name]='London')

2 个答案:

答案 0 :(得分:5)

区别在于第二个查询检查branch表中是否存在分支名称,然后在account表中删除它。

如果分支名称存在于account表中,但不在branch表中,则不会从account表中删除。

第一个查询从account表中删除记录是否存在branch表中的分支。

答案 1 :(得分:0)

这些查询完全相同。 首先,您只需从account中删除branch-name列值为'London'

在第二步,您也会这样做,但是检查branch-name是否在列表(查询结果)中返回 select [branch-name] from branch where [branch-name]='London', 但它总是返回元素列表'London'(因为where子句)。

因此两个查询的结果都是一样的。