SQL在vs交集中

时间:2012-09-17 12:06:53

标签: sql oracle

我想从表中选择结果

USER HOBBY
John Sport
Ann  Piano
Lee  Reading
Ann  Sport
Lee  Piano

我想搜索有多种共同爱好的人。哪个查询具有更好的性能,

select user from table where hobby = "sport"
intersect 
select user from table where hobby = "piano"

或者

select user from table where user in (select user from table where hobby = "piano") and where hobby = "sport"?

2 个答案:

答案 0 :(得分:0)

最佳表现来自 从表中选择用户hobby =“sport”或hobby =“piano”

但是如果这只是一个典型的例子,那么已经进行了很多测试,这里有一些: http://www.execsql.com/post/intersectexcept-versus-innot-in

BTW没有比自己尝试查询的执行时间更好的解决方案

答案 1 :(得分:0)

在Oracle中,假设(USER, HOBBY)是唯一的,您可以使用GROUP BY查询:

SELECT user
  FROM user_hobby
 WHERE hobby IN ('piano', 'sport')
 GROUP BY user
HAVING COUNT(*) = 2

这将使Oracle最多只执行一次数据传递,而INTERSECT会单独处理每个查询,因此需要两次传递。