Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Кудравцев Создание баз данных 2010

.pdf
Скачиваний:
83
Добавлен:
16.08.2013
Размер:
2.65 Mб
Скачать

Данный запрос довольно громоздок, но он состоит из двух однотипных блоков разделенных строкой:

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