2014-02-17 28 views
1

我有兩種不同形式的SQL條件子句。SQL EXISTS與Aggregate IS不爲NULL

使用EXISTS:

exists (select 1 from [table] where [conditions]) 

使用聚集函數:

(select max(1) from [table] where [conditions]) is not null 

[表]和[條件]在兩種語句相等。 這兩個子句有可能返回不同的結果嗎? 如果不是,哪一個具有更好的查詢性能? 重要的是,所討論的數據庫是IBM DB2 UDB v10。

+2

IBM DB2 UDB v10是否有EXPLAIN語句? –

+0

沒有DB2 UDB v10這樣的東西。 – mustaccio

+0

是的,有解釋。然而我沒有特權使用它。 – devmtl

回答

1

我沒有DB2來測試它。但我認爲這取決於。下面的語句:

select max(1) 
from (select 1 as i)t 
where i = 2 

主要生產的SQL Server(null)和MySQL在不同的結果(1)。如果DB2返回1,則語句不同。不過,我預計它會返回null

如果它返回null,那麼這兩個語句實際上是相同的。然而,max()聲明可能不如existsexists語句可以停止在第一個匹配值。

+0

謝謝Gordon Linoff。它返回'null'。再次感謝關於速度的解釋。 – devmtl