Объединение запросов
Составные запросы используются для того, чтобы комбинировать результаты двух операторов SELECT. Использование составного запроса позволяет организовать или, наоборот, подавить вывод повторяющихся записей. С помощью таких запросов можно выводить одновременно аналогичные данные, хранящиеся в разных столбцах Команда UNION Команда 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_NAME2 AS "Имя", P. PR_NAME3 AS "Отчество", P. PR_NAME AS "Фамилия", 'Член экипажа' AS "Тип", R. RNK_NAME AS "Роль/Место" FROM PERSON P INNER JOIN EQUIPAGE EQ ON EQ. EQ_PR_CODE = P. PR_CODE INNER JOIN RANK R ON R. RNK_CODE = EQ. EQ_RNK_CODE INNER JOIN AIRLINE AL ON AL. AL_NUM = EQ. EQ_FL_NUM INNER JOIN AIRPORT AFROM ON AFROM. AP_CODE = AL. AL_AP_FROM INNER JOIN CITY CFROM ON CFROM. CT_CODE = AFROM. AP_CT_CODE INNER JOIN AIRPORT ATO ON ATO. AP_CODE = AL. AL_AP_TO INNER JOIN CITY CTO ON CTO. CT_CODE = ATO. AP_CT_CODE WHERE CFROM. CT_NAME = 'Пермь' AND CTO. 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_SEAT AS VARCHAR( 20 )) FROM PERSON P INNER JOIN TICKET TC ON TC. TC_PR_CODE = P. PR_CODE INNER JOIN TARIFF TR ON TR. TR_CODE = TC. TC_TR_CODE INNER JOIN AIRPORT AFROM ON AFROM. AP_CODE = TR. TR_AP_FROM INNER JOIN CITY CFROM ON CFROM. CT_CODE = AFROM. AP_CT_CODE INNER JOIN AIRPORT ATO ON ATO. AP_CODE = TR. TR_AP_TO INNER JOIN CITY CTO ON CTO. CT_CODE = ATO. AP_CT_CODE WHERE CFROM. CT_NAME = 'Пермь' AND CTO. CT_NAME = 'Москва'
AND TC. TC_FL_DATE = '11.01.2008' В результате выполнения запроса получаем список: Листинг 25. Результат объединения запросов (команды UNION) – список всех прилетевших из Перми в Москву 11.01.2008
Читайте также: G - Объединение двух намазов в одно время (джамус-салят) Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|