Читайте также: |
|
_> SELECT cust_id, name _> FROM business;
+_________+________________________+ | cust_id | name | +_________+________________________+
| | | Hadley | | | |
| | | Tingley | | | |
| | | Tucker | | | |
| | | Hayward | | | |
| | | Frasier | | | |
| | | Spencer | | | |
| | | Young | | | |
| | | Blake | | | |
| | | Farley | | | |
| | | Chilton Engineering | | |
| 11 | Northeast Cooling Inc. |
| | | | Superior Auto | Body | | | |
| | | | AAA Insurance | Inc. | | |
+_________+________________________+ 13 rows in set (0.04 sec)
Запрос возвращает все 13 клиентов: 9 строк поступают из таблицы in_ dividual (физические лица), а остальные 4 – из таблицы business (юри_ дические лица). Таблица business включает всего один столбец с назва_ нием компании, а в таблице individual присутствуют два столбца: имя и фамилия физического лица. В данном случае из таблицы individual берется только фамилия.
Проверим, что оператор union all не удаляет дублирующие значения. Для этого приведем такой же запрос, как в предыдущем примере, но с дополнительным запросом к таблице business:
mysql> | SELECT cust_id, lname name |
_> | FROM individual |
_> | UNION ALL |
_> | SELECT cust_id, name |
_> | FROM business |
_> | UNION ALL |
_> | SELECT cust_id, name |
_> | FROM business; |
Глава 6. Работа с множествами | ||||
+_________+________________________+ | ||||
| cust_id | | name | | | ||
+_________+________________________+ | ||||
| | | | Hadley | | | |
| | | | Tingley | | | |
| | | | Tucker | | | |
| | | | Hayward | | | |
| | | | Frasier | | | |
| | | | Spencer | | | |
| | | | Young | | | |
| | | | Blake | | | |
| | | | Farley | | | |
| | | | Chilton Engineering | | | |
| | | | Northeast Cooling Inc. | | ||
| | | | Superior Auto Body | | | |
| | | | AAA Insurance Inc. | | | |
| | | | Chilton Engineering | | | |
| | | | Northeast Cooling Inc. | | ||
| | | | Superior Auto Body | | | |
| | | | AAA Insurance Inc. | | |
+_________+________________________+ 17 rows in set (0.01 sec)
Этот составной запрос включает три выражения select, два из которых идентичны. Как видно по результатам, четыре строки из таблицы bu_ siness включены дважды (ID клиентов 10, 11, 12 и 13).
Поскольку вряд ли вы когда_нибудь дважды включите один и тот же запрос в составной запрос, вот другой пример составного запроса, по которому возвращаются дублирующие данные:
mysql> | SELECT emp_id | |
_> | FROM employee | |
_> | WHERE | assigned_branch_id = 2 |
_> | AND | (title = 'Teller' OR title = 'Head Teller') |
_> | UNION | ALL |
_> | SELECT DISTINCT open_emp_id | |
_> | FROM account | |
_> | WHERE | open_branch_id = 2; |
+________+ | emp_id | +________+
| 10 |
| 11 |
| 12 |
| | 10 | |
+________+
4 rows in set (0.01 sec)
Первый запрос составного выражения выбирает всех операционистов отделения Woburn, а второй возвращает другое множество – операцио_ нистов, открывавших счета в отделении Woburn. Из четырех строк ре_
Операторы работы с множествами | |
зультирующего набора одна дублируется (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 в резуль_ тирующий набор включаются только три разные строки, а не четыре (три разные, одна дублирующаяся).
Дата добавления: 2015-08-17; просмотров: 51 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Теория множеств на практике | | | SELECT cust_id, fname, lname |