我有点担心我什么时候必须在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"?
答案 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
: