Когда использовать пересечение в запросе
Я немного смущен, когда я должен использовать пересечение в sql. Пример, который мне дают, следующий:
У меня есть две таблицы:
MovieStar(name, address, gender, birthdate)
MovieExec(name, address, cert#, netWorth)
В примере предлагается найти имя и адрес всех женщин-актеров, которые также являются исполнителями фильмов и имеют чистоту более 10000000. Решение примера в книге заключается в следующем:
(SELECT name, address
FROM MovieStar
WHERE gender = 'F')
INTERSECT
(SELECT name, address
FROM MovieExec
WHERE netWorth > 10000000);
Поэтому моя проблема в том, почему я должен использовать INTERSECT, тогда как я мог бы использовать оператор "И", например:
SELECT name, address
FROM MovieStar, MovieExec
WHERE gender = 'F' AND netWorth > 10000000
Есть ли какой-нибудь хитрый способ выяснить, когда лучше использовать INTERSECT или "И"?
1 ответ
Использование INTERSECT
когда вас это устраивает и вы получаете правильные результаты. Во-вторых, всегда сравнивайте план выполнения и статистику, потому что способ, которым вы получаете результат, может отличаться.
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' И СЕТЬ> 10000000
Я предполагаю, что первый подход вернет результат быстрее и использует меньше памяти (но Query Optimizer может многое сделать).
Когда вы должны использовать INTERSECT
:
- Вы хотите получить пересечение обоих множеств, и вы не можете присоединиться к ним явно