5. Построить sql-запрос для выборки сведений из бд, содержащей таблицы:
Блюдо (КодБл, НазвБл, Категория);
Продукт (КодПрод, НазвПрод, Калорийность);
Рецепт (КодБл, КодПрод, КолПродВБлюде).
Извлечь статистику уровней калорийности продукта: уровень калорийности, количество продуктов, имеющих эту калорийность, количество блюд, содержащих продукт этой калорийности. Не учитывать продукты, названия которых начинаются на «А» и блюда категории «Б». Упорядочить по убыванию.
РЕШЕНИЕ:
SELECT Продукт. Калорийность,
COUNT (distinct Продукт. КодПрод ) as ‘КодПрод’
COUNT (distinct Блюдо. КолБл) as ‘КодБл’
FROM Блюдо, Продукт, Рецепт
WHERE (Блюдо. КодБл=Рецепт. КодБл) and
( Продукт. КодПрод=Рецепт. КодПрод) and
Продукт. КодПрод not in
(SELECT КодПрод
FROM Продукт
WHERE НазвПрод LIKE ‘A%’)
and Блюдо. КодБл not in
(SELECT КодБл
FROM Блюдо
WHERE Категория=’Б’)
GROUP BY Продукт. Калорийность (?????)
ORDER BY Продукт. Калорийность desc; (???нужно писать Продукт.Калор-ть или просто GROUP BY Калорийность???)
Билет 9.
5. Блюдо (КодБл, НазвБл, Катег)
Продукт (КодПрод, НазвПрод, Калор)
Рецепт (КодБл, КодПрод, КодПродБл)
Извлечь коды и названия блюд, не содерж-ся в кол-ве более 100 единиц. Не должно быть ни одного продукта из тех, которые содержит блюдо «Солянка». Отсортировать ???рецепты в обратном порядке кодов блюд.
РЕШЕНИЕ:
Select КодБл, НазвБл
From Блюдо
Where NotExists (Select КодПрод
From Рецепт
WhereКолПродВБл >100
And КодПр In (Select РецКодПр
From Рецепт, Блюдо
Where (Рец.КодБл=Блюдо.КодБл)
And НазвБл= «Солянка»));
Order By КодБл Desc;
Билет 11.
5. Студент (КодСтуд, ФИОСтуд, Спец, Курс, Группа)
Предмет (КодПредм, НазвПредм, Объем, Спец, Курс)
Успев (КодСтуд, КодПредм, Оценка, Дата)
Извлечь студентов, которые имеют оценки и предметы, по которым получены оценки. Результат должен быть:
Код (Студ/Предм), Имя (ФИОСтуд/Назв), Тип (Студ/Предм), Сдач (Число оценок у студента/ по предметам). Упорядочить по типам, затем по именам.
РЕШЕНИЕ:
SELECT DISTINCT КодСтуд as ‘Код’,
ФИОСтуд as ‘Имя’,
Студет as ‘Тип’
FROM Студент
WHERE КодСтуд NOT IN
(SELECT КодСтуд
FROM Успев
WHERE Оценка is null)
UNION
SELECT DISTINCT КодПредм as ‘Код’,
НазвПредм as ’Имя’,
Предмет as ‘Тип’
FROM Предмет
WHERE КодПредм NOT IN
(SELECT КодПредм
FROM Успев
WHERE Оценка is null)
ORDER BY Тип
ORDER BY Имя
Билет 14.
5.???? Студент (КодСтуд, ФИО, Спец, Курс, Группа)
Предмет (КодПредм, НазвПр, Объем, Спец, Курс)
Успев (КодСт, КодПр, Оценка, Дата)
Извлечь статистику успеваемости студ группы: идентиф. гр. (спец., курс, группа), количество студентов в группе, количество предметов, по которым имеют оценки, средний балл. Не учитывать предметы объемом<15 часов. Упорядочить по идент. группы.
РЕШЕНИЕ:
SELECT (Ст. Спец, Ст. Курс, Ст. Гр) as Идент,
COUNT (DISTINCT Ст. КодСтуд) as КолСт,
COUNT (DISTINCT Успев. КодПр) as КолПр
FROM Студент LEFT JOIN Успеваем
ON Ст. КодСт=????
Билет 16
5. Извлечь номера и ФИО студентов, сдавших в точности те же предметы, которые сдал Иванов. Упорядочить в обратном алфавитном порядке.
РЕШЕНИЕ:
SELECT КодСт, ФИОСт
FROM Студент
WHERE NOT EXISTS (
SELECT *
FROM Успеваемость
WHERE КодСт in (
SELECT КодСт
FROM Студент
WHERE ФИО=’Иванов’
And Спец=’АСУ’
And Группа=’347’)
And КодПред not in (
SELECT КодПред
FROM Успеваемость
WHERE Успеваемость.КодСт=Студент.КодСт))
And NOT EXISTS (
SELECT *
FROM Успеваемость
WHERE КодСт in (
SELECT КодСт
FROM Успеваемость
WHERE Успеваемость.КодСт=Предмет.КодСт)
And КодПред not in (
SELECT КодПред
FROM Успеваемость
WHERE КодСт in(
SELECT КодСт
FROM Студент
WHERE ФИО=’Иванов’
And Спец=’АСУ’
And Группа=’347’)));
Билет 17
5) Извлечь номер и название предмета по котрым сдали на «отл» по крайней мере все те студенты, которые сдали на 4 и 5 «базы данных».
Студ(КодСт, ФИОСт, Спец, Курс, Группа)
Предмет( КодПр, НазвПред, Объем, Спец, Курс)
Успев( КодСт, КодПр, Оценка, Дата)
РЕШЕНИЕ:
SELECT КодПр, НазвПр
FROM Предмет
WHERE КодПр IN
(SELECT КодПр
FROM Успев
WHERE Оценка='отл'
AND КодСт IN
(SELECT КодСт
FROM Успев
WHERE (Оценка='отл' OR Оценка='хор') AND КодПр IN
(SELECT КодПр
FROM Предмет
WHERE НазвПр='базы данных')))
AND НазвПр<>'базы данных';