Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по БД(Манило).doc
Скачиваний:
7
Добавлен:
02.08.2019
Размер:
561.15 Кб
Скачать

Использование оператора union для объединения результатов инструкций select

UNION объединяет информацию из 2-х и более отдельных запросов SELECT в один курсор или таблицу. При этом в команде SELECT можно использовать до 10 членов UNION, связывая каждую инструкцию SELECT с предыдущей. Результирующий набор, созданный первой командой SELECT, определяет требуемую структуру для остальных команд SELECT. Порядок, количество, размер и тип полей в первой команде SELECT определяет структуру для всех последующих команд SELECT.

Например, для получения списка всех студентов и преподавателей фамилии которых заключены между буквами «К» и «С»:

SELECT SFAM, SIMIA FROM STUD; WHERE SFAM BETWEEN ‘K’ AND ‘C’; UNION; SELECT TFAM, TIMIA FROM TEACHER; WHERE TFAM BETWEEN ‘K’ AND ‘C’

Когда 2 или более запросов подвергаются объединению, их столбцы вывода должны быть совместимы для объединения. Это означает для каждого запроса необходимость включения одинакового числа столбцов в том же порядке, что и 1, 2, 3 и т.д. и при этом должна присутствовать совместимость типов.

Например: символьные поля должны иметь одинаковое число символов. Кроме того нельзя использовать агрегатные функции в запросе SELECT при объединении. Агрегатные функции – MIN, MAX, AVG, SUM. Также UNION будет автоматически исключать дубликаты строк из вывода.

Пусть таблица STUD1 содержит поле, состоящее из 30 символов, которые включают Имя и Фамилию.

Таблица TEACHER содержит отдельные поля для имени и фамилии. Сумма длин этих полей также равна 30 символам.

В таблице STUD1 определено поле для хранения факультета, а в таблице TEACHER – нет. Для объединения данных результирующих наборов необходимо согласовать эти различия.

SELECT STUD1.FAC FROM STUD;

UNION;

SELECT PADR (ALLTRIM(TEACHER.FIRSTNAME)+ALLTRIM(TEACHER.LASTNAME), 30);

AS NAME, SPACE (10) AS FAK;

FROM TEACHER

Член SPACE(10) играет роль «заглушки», которая относится к полю, содержащему имя факультета в файле TEACHER. Этот член заполняет поле с именем факультета в объединенные результирующие таблицы пробелами. Без подобной заглушки операция UNION корректно работать не будет. Подобную заглушку можно поставить в любой инструкции SELECT. Можно поместить заглушку в первую команду SELECT, чтобы зарезервировать строку пробелов для поля, которое существует только в последующих командах SELECT. Можно включить пробелы в одну из внутренних команд SELECT, чтобы обеспечить совпадение с первой командой SELECT.

Функция ALLTRIM удаляет пробелы слева и справа из соответствующего имени учителя.

Функция PADR создает поле с заданной длиной. Между именем и фамилией поставлен разделительный пробел (+). Если общая длина поля меньше 30-символьного ограничения, то будет усечен последний символ.

Воздействие ключевого слова UNION аналогично действию DISTINCT. Это значит, что каждая добавленная в результирующий набор запись проверяется на уникальность. Члены UNION используются только для объединения запросов, но никак не влияют на подзапросы.

Правила объединения с помощью UNION:

  1. Любое поле, включенное в первый список полей, должно быть представлено полем или заглушкой в последующих списках полей.

  2. Любое поле из последующих списков полей, которое не входит в первый список полей, должно быть представлено заглушкой в первом списке

  3. В первом списке не должно быть вычисляемых полей

  4. Члены ORDER BY и INTO могут входить в любую инструкцию SELECT, но только 1 раз и применяются ко всему результату.

  5. Член ORDER BY должен ссылаться на поля, по их позициям в списке, а не по имени.

  6. При отсутствии члена ORDER BY для сортировки используется порядок следования полей в списке.

  7. Члены GROUP BY и HAVING могут присутствовать в каждой инструкции SELECT, причем их влияние ограничено только результатами работы данной инструкции SELECT.

  8. С помощью членов UNION нельзя объединять результаты подзапросов, то есть члены UNION нельзя применить к инструкциям SELECT, используемым внутри члена WHERE других инструкций SELECT.

  9. При построении объединения можно использовать не более 10 членов UNION.