
Кудравцев Создание баз данных 2010
.pdfДанный запрос довольно громоздок, но он состоит из двух однотипных блоков разделенных строкой:
T_Prir.Prir = (SELECT MAX(Prir)…)
В каждом из блоков производится подсчет количества поездок каждого студента за 2008 и 2009 гг. На основании этих подсчетов вычисляется прирост количества поездок, а также максимальное значение этого прироста.
SELECT fio, Prir FROM student,
(SELECT Col2008.st_id, Col2009.Col_Tr-Col2008.Col_Tr AS Prir FROM (SELECT travel.st_id, COUNT(travel.c_id) As Col_Tr
FROM travel
WHERE date>='01/01/2008' AND date<='12/31/2008' GROUP BY travel.st_id
UNION
SELECT st_id, 0 As Col_Tr FROM student
WHERE NOT EXISTS (SELECT * FROM travel
WHERE student.st_id=travel.st_id AND date>='01/01/2008' AND
date<='12/31/2008'
)
) AS Col2008,
(SELECT travel.st_id, COUNT(travel.c_id) As Col_Tr FROM travel
WHERE date>='01/01/2009' AND date<='12/31/2009' GROUP BY travel.st_id
UNION
SELECT st_id, 0 As Col_Tr FROM student
WHERE NOT EXISTS (SELECT * FROM travel
WHERE student.st_id=travel.st_id AND date>='01/01/2009' AND
date<='12/31/2009'
)
) AS Col2009
151
WHERE Col2008.st_id=Col2009.st_id ) AS T_Prir
WHERE student.st_id=T_Prir.st_id AND T_Prir.Prir =
(SELECT MAX(Prir)
FROM (SELECT Col2008.st_id, Col2009.Col_Tr-Col2008.Col_Tr AS Prir
FROM (SELECT travel.st_id, COUNT(travel.c_id) As Col_Tr FROM travel
WHERE date>='01/01/2008' AND date<='12/31/2008' GROUP BY travel.st_id
UNION
SELECT st_id, 0 As Col_Tr FROM student
WHERE NOT EXISTS (SELECT * FROM travel
WHERE student.st_id=travel.st_id AND date>='01/01/2008' AND
date<='12/31/2008'
)
) AS Col2008,
(SELECT travel.st_id, COUNT(travel.c_id) As Col_Tr FROM travel
WHERE date>='01/01/2009' AND date<='12/31/2009' GROUP BY travel.st_id
UNION
SELECT st_id, 0 As Col_Tr FROM student
WHERE NOT EXISTS (SELECT * FROM travel
WHERE student.st_id=travel.st_id AND date>='01/01/2007' AND
date<='12/31/2007'
)
) AS Col2009
WHERE Col2008.st_id=Col2009.st_id ) AS T_Max
)
152
Контрольные вопросы
1.В какой последовательности выполняются разделы оператора
SELECT?
2.Каково назначение раздела GROUP BY и что собой представляют агрегатные функции?
3.Чем отличается использование предиката IN от квантора существования EXISTS?
4.Что собой представляют коррелированные и некоррелированные SQL-запросы?
5.Каким образом задаются ограничения для столбцов и таблиц при создании базы данных?
6.Написать SQL-запрос вида: «Выбрать студентов, у которых соотношение (Стоимость путевки)/(Длительность путешествия) была минимальна».
153
Список рекомендуемой литературы
Основная
1.Хансен Г., Хансен Дж. Базы данных: разработка и управление: Пер. с англ. М.: БИНОМ, 1999.— 704 с.
2.Мейер Д. Теория реляционных баз данных. М.: Мир, 1987.— 540 с.
3.Маклаков С.В. BPWin и ERWin. CASE – средства разработки информационных систем. М.:Диалог-МИФИ, 2001.— 304 с.
4.Вейскас Дж. Эффективная работа с Microsoft Access 2000.
СПб: Питер, 2001.— 1040 с.
5.Яргер Р., Риз Дж., Кинг Т. MySQL и mSQL. Базы данных для небольших предприятий и Интернета. СПб: Символ-Плюс,
2000.— 560 с.
6.Стоунз Р., Мэтью Н. PostgreSQL. Основы: Пер. с англ. СПб: Символ-Плюс, 2002.— 640 с.
7.Смирнов С.Н. Работаем с ORACLE. М.: Гелиос, 1998.— 320 с.
8.Интернет ресурс www.intuit.ru
Дополнительная
9.Когаловский М.Р. Абстракции и модели в системах баз данных// Журнал «СУБД». М.: Открытые системы, 4—5/1998// www.cemi.rssi.ru/mei/articles/kog98.htm
10.Пржиялковский В.В. Абстракции в проектировании баз дан-
ных. // osp.aanet.ru/dbms/1998/01_02/090.htm
154
Константин Яковлевич Кудрявцев
СОЗДАНИЕ БАЗ ДАННЫХ
Учебное пособие
Редактор Е. Г. Станкевич
Подписано в печать 19.10.2010. Формат 60х84 1/16. Объем 9,75 п.л. Уч.-изд.л. 9,75. Тираж 100 экз. Изд. № 102-1. Заказ
Национальный исследовательский ядерный университет «МИФИ».
Типография НИЯУ МИФИ, 115409 Москва, Каширское шоссе, 31.
155