Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
conspect.pdf
Скачиваний:
374
Добавлен:
17.03.2016
Размер:
27.86 Mб
Скачать

Базы данных

БГУИР, ПОИТ

 

 

6.3. Объединение запросов (UNION)

6.3.1. Обзор структуры и краткие пояснения

Объединение запросов с применением UNION используется для объединения результатов нескольких запросов в один итоговый результат.

Итак, вся структура объединения запросов выглядит следующим образом:

SELECT ...

UNION [ALL | DISTINCT] SELECT ...

[UNION [ALL | DISTINCT] SELECT ...]

Дополнительные примеры использования UNION см. в разделе, посвящён-

ном SELECT.

6.3.2. SELECT … UNION

Используется для объединения результатов нескольких запросов в один итоговый результат.

В руководстве сказано…

У всех подзапросов должно быть одинаковое количество извлекаемых колонок, имена которых определяются первым подзапросом.

Если типы данных, возвращаемых в колонку разными подзапросами, не совпадают, MySQL учитывает это и сохраняет все значения.

По умолчанию UNION работает в режиме DISTINCT.

Множество дополнительных мелких деталей см. здесь: http://dev.mysql.com/doc/refman/5.5/en/union.html

Стр: 179/248

Базы данных

БГУИР, ПОИТ

 

 

6.3.3. Пример использования UNION

Допустим, у нас есть две таблицы платежей – операционная и архивная.

Выяснить сумму платежей по каждому пользователю за всё время можно

так:

SELECT `name` , SUM( `money` ) FROM (

SELECT `name` , `money` FROM `payment_operational` UNION ALL

SELECT `name` , `money` FROM `payment_archive`

) AS `X`

GROUP BY `name`

Стр: 180/248

Базы данных

БГУИР, ПОИТ

 

 

А что получится, если выполнить вот такой запрос (сначала выборка и группировка, потом объединение)?

SELECT `name` , SUM( `money` )

FROM `payment_operational`

GROUP BY `name`

UNION ALL

SELECT `name` , SUM( `money` )

FROM `payment_archive`

Как видно, итоговый результат содержит «сборку» двух независимых вычислений сумм, а не итоговые суммы.

6.3.4.Краткие итоги

1.При всей предельной простоте UNION может преподнести неприятные сюрпризы.

2.В большинстве случаев, если вам кажется, что надо использовать UNION, вы чего-то не предусмотрели или на уровне создания модели БД, или на стадии обдумывания задачи, для решения которой пишете запрос .

Стр: 181/248

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]