116
Глава 6. Работа с множествами
Второй шаг – выявить два запроса,
действительно
имеющих пере
крывающиеся данные, и
затем применить оператор
intersect
. Для это
го используем тот же запрос, что и для демонстрации разницы между
union
и
union
all
, только на
этот раз возьмем оператор
intersect
:
SELECT emp_id
FROM employee
WHERE assigned_branch_id = 2
AND (title = 'Teller' OR title = 'Head Teller')
INTERSECT
SELECT DISTINCT open_emp_id
FROM account
WHERE open_branch_id = 2;
++
| emp_id |
++
| 10 |
++
1 row in set (0.01 sec)
Пересечение этих двух запросов дает сотрудника с ID равным 10, что
является единственным значением, имеющимся в результирующих
наборах обоих запросов.
Наряду с
оператором
intersect
, удаляющим все дублирующие строки
области перекрытия, спецификация SQL ANSI предлагает оператор
in
tersect
all
, не удаляющий дубликаты. Единственный сервер БД, в на
стоящее время реализующий оператор
intersect
all
, – DB2 Universal
Server компании IBM.
Оператор except
Спецификация SQL ANSI включает оператор
except
(разность), пред
назначенный для выполнения операции разности. Опять же, к сожа
лению, MySQL версии 4.1 не реализует оператор
except
, поэтому в дан
ном разделе
действуют те же соглашения, что и в предыдущем.
При работе с Oracle Database вам понадобится использовать опе
ратор
minus
(минус), не совместимый со спецификацией ANSI.
Операция
except
возвращает первую таблицу за вычетом всех перекры
тий со второй таблицей. Вот пример из предыдущего раздела, но
с опе
ратором
except
вместо
intersect
:
Достарыңызбен бөлісу: