何时在查询中使用intersect

时间:2015-08-31 14:02:10

标签: sql intersect

我有点担心我什么时候必须在sql中使用intersect。我给出的例子如下:

我有两张桌子:

 MovieStar(name, address, gender, birthdate)
 MovieExec(name, address, cert#, netWorth)

该示例要求查找所有女演员的姓名和地址,这些演员也是电影执行人,并且networth超过10000000.本书中的示例解决方案如下:

(SELECT name, address
 FROM MovieStar
 WHERE gender = 'F')
   INTERSECT
 (SELECT name, address
  FROM MovieExec
  WHERE netWorth > 10000000);

所以我的问题是为什么我必须使用INTERSECT,而我可以使用" AND"运营商如:

SELECT name, address
FROM MovieStar, MovieExec
WHERE gender = 'F' AND netWorth > 10000000

是否有任何棘手的方法可以找出何时更好地使用INTERSECT或" AND"?

1 个答案:

答案 0 :(得分:3)

在适合您的情况下使用INTERSECT并获得正确的结果。第二个总是比较执行计划和统计数据,因为获得结果的方式可能会有所不同。

<强> SqlFiddleDemo

1)

 SELECT name, address
 FROM MovieStar
 WHERE gender = 'F'
 INTERSECT
 SELECT name, address
 FROM MovieExec
 WHERE netWorth > 10000000;

这意味着从MovieStar获取性别为'F'的姓名和地址, 从MovieExec获取名称和地址,其中networth&gt; 100000并找到两组中的记录。

2)

SELECT ms.name, ms.address
FROM MovieStar AS ms, MovieExec AS me
WHERE gender = 'F' AND netWorth > 10000000

这意味着您生成CROSS JOIN笛卡尔积(MxN记录),然后仅记录性别='F'和净值&gt;的记录。千万

我猜第一种方法会更快地返回结果并使用更少的内存(但是查询优化器可以做很多事情)。

何时应使用INTERSECT

  • 你想得到两个集合的交集,你不能明确地加入它们