Операторы
работы с множествами
115
зультирующего набора одна дублируется (ID сотрудника – 10). Если
бы потребовалось
исключить
дублирующие строки из составной таб
лицы,
вместо оператора
union
all
надо было бы использовать оператор
union
:
mysql>
SELECT emp_id
> FROM employee
> WHERE assigned_branch_id = 2
> AND (title = 'Teller' OR title = 'Head Teller')
> UNION
> SELECT DISTINCT open_emp_id
> FROM account
> WHERE open_branch_id = 2;
++
| emp_id |
++
| 10 |
| 11 |
| 12 |
++
3 rows in set (0.01 sec)
Для данной версии запроса с
применением оператора
union
all
в резуль
тирующий набор включаются только три разные строки, а
не четыре
(три разные, одна дублирующаяся).
Оператор intersect
Спецификация SQL ANSI включает оператор
intersect
(пересечение),
предназначенный для выполнения пересечений. К
сожалению, MySQL
версии 4.1 не реализует оператор
intersect
. Oracle (но не SQL Server) по
зволяет использовать
intersect
. Однако
поскольку для всех примеров
данной книги используется MySQL, результирующие наборы для при
меров запросов в данном разделе являются
вымышленными и не могут
быть получены в MySQL до версии 5.0 включительно. Здесь не показа
но приглашение MySQL (
mysql>
), потому что эти выражения не выпол
няются сервером MySQL.
Если два запроса составного запроса
возвращают неперекрывающиеся
таблицы, пересечением будет пустое множество. Рассмотрим следую
щий запрос:
Достарыңызбен бөлісу: