русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Команда UNION


Дата добавления: 2015-07-09; просмотров: 552; Нарушение авторских прав


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

В составных запросах можно использовать ключевое слово ORDER BY. Однако ключевое слово ORDER BY в них можно использовать только для упорядочения результатов окончательного вывода обоих запросов. Поэтому в составном запросе допускается использовать только одно выражение с ключевым словом ORDER BY, хотя сам составной запрос может состоять из нескольких операторов SELECT На столбцы в выражении ключевого слова ORDER BY можно ссылаться как по псевдонимам, так и по их номерам в списке выбора

Допустим нам нужно найти всех прилетевших из Перми в Москву за определенное число. Человек может прилететь в качестве члена экипажа (если коды этой личности присутствует в таблице EQUIPAGE на заданное число), или в качестве пассажира (если у него есть билет на заданное число). Таким образом, требуется объединить два запроса, первый найдет фамилию, имя, отчество для всех членов экипажа прилетевших из Перми в Москву за 11.01.2008, а второй выведет фамилию, имя, отчество тех кто имеет билеты из Перми в Москву на это же число (такой запрос мы уже делали, когда исследовали соединения таблиц). Для того чтобы отличать пассажира от члена экипажа сделаем следующее, добавим в результат новое поле, где для первого запроса будет во всех строках содержаться один и тот же текст — «Член экипажа», второй запрос разместит в этом поле текст «Пассажир». Это дополнительное поле озаглавим как «Тип». Кроме этого добавим еще одно поле, в которое будем выводить дополнительную информацию, для запроса по членам экипажа будем выводить роль для данного члена, а для пассажиров номер места указанный в билете. Соответственно это поле мы так и озаглавим «Роль/Место».



Обратим внимание, что вновь введенные поля в двух запросах не совпадают по типу. Для того чтобы можно было использовать команду UNION необходимо привести типы этих полей во втором запросе к тому же типу, что и в первом. Преобразование данных к требуемому типу обеспечивает функция CAST. Для поля «Тип» должно быть сделано преобразование к типу CHAR(12), а для поля «Роль/Место» к типу VARCHAR(20).

Получаем запрос:[52]

 

SELECT P.PR_NAME2AS"Имя",

P.PR_NAME3AS"Отчество",

P.PR_NAMEAS"Фамилия",

'Член экипажа'AS"Тип",

R.RNK_NAMEAS"Роль/Место"

FROM PERSONP

INNER JOIN EQUIPAGEEQONEQ.EQ_PR_CODE=P.PR_CODE

INNER JOIN RANKRONR.RNK_CODE=EQ.EQ_RNK_CODE

INNER JOIN AIRLINEAL ON AL.AL_NUM=EQ.EQ_FL_NUM

INNER JOIN AIRPORTAFROMONAFROM.AP_CODE=AL.AL_AP_FROM

INNER JOIN CITYCFROMONCFROM.CT_CODE=AFROM.AP_CT_CODE

INNER JOIN AIRPORTATOONATO.AP_CODE=AL.AL_AP_TO

INNER JOIN CITYCTOONCTO.CT_CODE=ATO.AP_CT_CODE

WHERE CFROM.CT_NAME='Пермь'ANDCTO.CT_NAME='Москва'

AND EQ.EQ_FL_DATE='11.01.2008'

UNION

SELECT P.PR_NAME2,P.PR_NAME3,P.PR_NAME,

CAST('Пассажир' AS CHAR(12)),

CAST(TC.TC_SEATAS VARCHAR(20))

FROM PERSONP

INNER JOIN TICKETTCONTC.TC_PR_CODE=P.PR_CODE

INNER JOIN TARIFFTRONTR.TR_CODE=TC.TC_TR_CODE

INNER JOIN AIRPORTAFROMONAFROM.AP_CODE=TR.TR_AP_FROM

INNER JOIN CITYCFROMONCFROM.CT_CODE=AFROM.AP_CT_CODE

INNER JOIN AIRPORTATOONATO.AP_CODE=TR.TR_AP_TO

INNER JOIN CITYCTOONCTO.CT_CODE=ATO.AP_CT_CODE

WHERE CFROM.CT_NAME='Пермь'ANDCTO.CT_NAME='Москва'

AND TC.TC_FL_DATE='11.01.2008'

В результате выполнения запроса получаем список:

Листинг 25. Результат объединения запросов (команды UNION) – список всех прилетевших из Перми в Москву 11.01.2008

Имя Отчество Фамилия Тип Роль/Место
Александр Александрович Чудинов Пассажир
Владимир Николаевич Карпов Пассажир
Владимир Юрьевич Войтович Пассажир
Елена Павловна Бельтюкова Пассажир
Ирина Валентиновна Щекина Пассажир 4A
Константин Игоревич Баталов Пассажир
Лариса Вилльевна Вашкарина Член экипажа Борт проводник
Максим Владимирович Бычков Член экипажа Командир
Наталья Васильевна Вожакова Пассажир
Олег Владимирович Лядов Член экипажа Пилот
Ольга Юрьевна Боброва Пассажир
Светлана Александровна Ветошкина Член экипажа Борт проводник
Светлана Леонидовна Верушкина Пассажир
Сергей Владимирович Богатырев Пассажир
Татьяна Викторовна Владысик Пассажир
Елена Александровна Воронюк Пассажир 20А
Мария Ивановна Выгузова Пассажир 20Б
Ольга Николаевна Вяткина Пассажир 20В
Юлия Дмитриевна Гаевская Пассажир 20Г
Василий Александрович Глазов Пассажир 20Д
Дмитрий Федорович Глумов Пассажир 21А

 



<== предыдущая лекция | следующая лекция ==>
AND NOT EXISTS | Добавление группы строк


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.043 сек.