2014-09-05 114 views
0

我有這些表:DELETE語句在SQL

  • 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

查詢#2只是一種更復雜(更不直觀)的#1版本 - 它們最終都做同樣的事情..... – 2014-09-05 11:18:45

+0

這是什麼目的? – Bulat 2014-09-05 11:19:24

+0

感謝您的建議。你建議使用這兩個之一嗎?如果我們能這樣說,第二種方式看起來更專業嗎? – George 2014-09-05 11:20:24

回答

0

這些查詢做完全一樣的。 在第一,你只需從account delede其中branch-name列的值是'London'

在第二個你做同樣的,但你是否branch-name列表(查詢結果)由 select [branch-name] from branch where [branch-name]='London', 返回,但它總是返回元素列表'London'(由於where子句)。

所以這兩個查詢的結果是相同的。

5

區別在於第二個查詢在account表中將其刪除之前,檢查分支名稱是否存在於branch表中。

如果分支名稱存在於account表中,但不存在於branch表中,那麼它將不會從account表中刪除。

第一個查詢從account表中刪除記錄,看看分支是否存在於branch表中。 #

+1

點擊。 。 。這些是子查詢和外部查詢中不同的表名。 – 2014-09-05 11:23:49