何时在查询中使用交集

when to use intersect in a query

我对什么时候必须在 sql.The 中使用相交感到有点困惑,我得到的示例如下:

我有两个表:

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

这个例子要求找到所有的女演员的姓名和地址,同时也是电影执行人并且拥有超过10000000.The的净资产,书中例子的解决方案如下:

(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" 更好?

在适合您的情况下使用 INTERSECT,您会得到正确的结果。其次始终比较执行计划和统计信息,因为获得结果的方式可能会有所不同。

SqlFiddleDemo

1)

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

意思是从MovieStar取名字和地址,性别是'F', 从 MovieExec 中获取名称和地址,其中 networth > 100000 并找到两组中的记录。

2)

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

这意味着您生成 CROSS JOIN 笛卡尔积(MxN 条记录),然后只获取性别 = 'F' AND netWorth > 10000000

的记录

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

什么时候应该使用INTERSECT:

  • 您想获得两个集合的交集,但您不能显式加入它们