русс | укр

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

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

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

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


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

ЗАМЕЧАНИЕ


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


Точно такого же результата можно было добиться построив запрос с использованием группировки по колонкам PR_NAME2 , PR_NAME3 , PR_NAME и применив HAVING COUNT(*) >1

Следующий запрос проиллюстрирует другой пример использования функции COUNT в подзапросе (в этом случае использование подзапроса является единственным способом получения результата). Итак получим фамилию, имя, отчество пассажиров, которые приобрели более одного билета в течении 2008 года, также выведем номер авиалинии и дату вылета из билета. Внутренний подзапрос подсчитает количество билетов за 2008 год для каждой личности, которые извлекаются внешним запросом. При этом внешний запрос выбирает только те строки, где количество найденное внутреннем запросом будет больше одного (иными словами у этой личности больше одного билета), а также производит внутреннее объединение таблиц PERSON и TICKET. . Внутренний и внешний запрос связаны при помощи приравнивания кода личности из внешнего запроса и кода личности указанного в билете из внутреннего запроса. Для того чтобы данные на билеты приобретенные одним пассажиром выводились вместе, результат упорядочиваем по фамилии и имени.

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

SELECT P.PR_NAME2AS"Имя",

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

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

T.TC_FL_NUMAS"Номер авиалинии",

T.TC_FL_DATEAS"Дата вылета"

FROM PERSONP

INNER JOIN TICKETTONT.TC_PR_CODE=P.PR_CODE

WHERE T.TC_FL_DATEBETWEEN'1.01.08'AND'31.12.08'

AND (SELECT COUNT(*) FROM TICKET

WHERE (TC_PR_CODE=P.PR_CODE)

AND (TC_FL_DATEBETWEEN'1.01.08'AND'31.12.08')) >1

ORDER BY P.PR_NAME,P.PR_NAME2

 

Другой способ получить этот же результат – это воспользоваться вариантом IN. Как правило, связные подзапросы можно заменить на вариант IN, внутри которого находится подзапрос.



Для получения результата внутренний подзапрос должен найти коды всех пассажиров имеющих более одного билета в течении одного года, для этого нужно получить код личности (TC_TR_CODE) из таблицы TICKET сгруппировав результат по этому коду. Для выделения тех кодов, которые встречаются более одного раза, используем HAVING COUNT(*) >1. Внешний запрос выведет фамилии, имена, отчества, номера авиалинии и даты вылета для людей, коды которых были найдены во внутреннем запросе.

Запрос будет иметь вид: [47]

SELECT P.PR_NAME2AS "Имя",

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

P.PR_NAME AS"Фамилия",

T.TC_FL_NUMAS"Номер авиалинии",

T.TC_FL_DATEAS"Дата вылета"

FROM PERSONP

INNER JOIN TICKETTONT.TC_PR_CODE=P.PR_CODE

WHERE T.TC_FL_DATEBETWEEN'1.01.08'AND'31.12.08'

AND T.TC_PR_CODEIN

(SELECT TC_PR_CODEFROMTICKET

WHERE TC_FL_DATEBETWEEN'1.01.08'AND'31.12.08'

GROUP BY TC_PR_CODEHAVING COUNT(*) >1)

ORDER BY P.PR_NAME,P.PR_NAME2

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

Листинг 24. Список пассажиров, которые приобрели более одного билета в течении 2008 года, также выводится номер авиалинии и дата вылета из билета. (с использованием GROUP BY и HAVING в подзапросе)

Имя Отчество Фамилия Номер авиалинии Дата вылета
Константин Игоревич Баталов 08.01.2008
Константин Игоревич Баталов 11.01.2008
Мария Ивановна Выгузова 08.01.2008
Мария Ивановна Выгузова 11.01.2008
Василий Александрович Глазов 08.01.2008
Василий Александрович Глазов 11.01.2008


<== предыдущая лекция | следующая лекция ==>
Связанные подзапросы | Использование оператора EXISTS


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


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

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

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


 


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

 
 

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

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