
- •Тема 1 Проектирование базы данных
- •Тема 2 Проектирование структуры таблиц при использовании языка Transact-sql
- •Тема 3 Проектирование структуры таблиц при использовании case-средства erwin и консоли sql Server Management Studio
- •Тема 4 sql Server Management Studio
- •Тема 5 Выборка данных из бд
- •Тема 6 Объединение таблиц
- •Тема 7 Вложенные запросы
- •Тема 8 использование оператора exists, case, any и all
- •Тема 9 Запросы на добавление, удаление и изменение записей. Работа с тригирами и транзакциями
- •Тема 10 Проектирование клиентской части приложения
- •Тема 11 Создание отчетов
- •Тема 12 Создание справки и инсталляционного пакета
Тема 8 использование оператора exists, case, any и all
Задание 1
Если на определенную группу составлена тарификация - вывести сообщение: 'На данную группу составлена тарификация', в противном случаии вывести: 'На данную группу не составлена тарификация'. В примере использовать группу “14 тп” и “5 уф”.
Код запроса:
if exists (select * from (Select distinct Группа from Группы
as A left join Тарификация as B on A.код_группы=B.код_группы
where Код_тарификации is not null) as c where группа='14 тп' )
begin print 'На данную группу составлена тарификация'
end
else
begin
print 'На данную группу не составлена тарификация'
end
Задание 2
Если хотя бы на одну специальность отводится меньше 5000 часов – вывести специальности, на которые отводится меньше 3000 часов, в противном случае вывести специальности, на которые отводится больше 3000 часов. (поменяйте знак меньше возле 5000 на больше, осмыслить результат).
Если меньше 5000:
Если больше 5000:
Код запроса:
if exists (select * from (select название,часов=sum(Количество_часов)
from Специальности as A join Учебный_план as B
on A.код_специальности=B.Код_специальности
group by название) as v
where часов<5000)
begin
select * from (select название,часов=sum(Количество_часов)
from Специальности as A join Учебный_план as B
on A.код_специальности=B.Код_специальности group by название) as v
where часов<3000
end else select * from (select название,часов=sum(Количество_часов)
from Специальности as A join Учебный_план as B
on A.код_специальности=B.Код_специальности group by название) as v
where часов>3000
Если больше 5000:
if exists (select * from (select название,часов=sum(Количество_часов)
from Специальности as A join Учебный_план as B
on A.код_специальности=B.Код_специальности
group by название) as v where часов>5000)
begin
select * from (select название,часов=sum(Количество_часов)
from Специальности as A join Учебный_план as B
on A.код_специальности=B.Код_специальности
group by название) as v where часов<3000
end else select * from (select название,часов=sum(Количество_часов)
from Специальности as A join Учебный_план as B
on A.код_специальности=B.Код_специальности
group by название) as v where часов>3000
Задание 3
Если все дисциплины задействованы в учебном плане, вывести сообщение: 'В учебном плане задействованы все дисциплины', в противном случаии, вывести список не зайдействованных дисциплин в учебном плане.
Код запроса:
if exists (select полное from дисциплины where дисциплины.код
not in (select distinct код_дисциплины from учебный_план))
select полное from дисциплины where дисциплины.код
not in (select distinct код_дисциплины from учебный_план)order by полное
else
print 'В учебном плане задействованы все дисциплины'
Задание 4
Вывести информацию и таблицы Учебный план в следующем формате, если цифра 1 вывести слово Первый, 2 – Второй, 3 – Третий, 4 – Четвертый, для остальных цифр словосочетание : Я такой не знаю.
Код запроса:
Select курс=Case курс
when 1 then 'Первый' when 2 then 'Второй'
when 3 then 'Третий' when 4 then 'Четвертый'
end,
семестр=CASE семестр when 1 then 'Первый'
when 2 then 'Второй'
when 3 then 'Третий'
when 4 then 'Четвертый'
else 'Я такой не знаю'
end
from учебный_план
Задание 5
Вывести информацию о преподаваемых дисциплинах в первом семестре, при этом вывести дополнительный столбец “Пояснение”: если на дисциплину отводится меньше 30 часов вывести сообщение: “Что-то маловато”, если больше или равно 30, но меньше 50, вывести: “Нормально”, если больше или равно 50, но меньше 100, вывести: “Достаточно”, если больше или равно 100, вывести: “Что-то многовато”.
Код запроса:
select a.семестр, a.тип_дисциплины, b.Полное, a.Количество_часов,
'Пояснение' = Case when Количество_часов < 30 then 'Что-то маловато'
when Количество_часов >= 30 and Количество_часов < 50 then 'Нормально'
when Количество_часов >= 50 and Количество_часов < 100 then 'Достаточно'
when Количество_часов >= 100 then 'Что-то многовато'
end from Учебный_план as a, Дисциплины as b
where b.код=a.код_дисциплины and семестр=1
Задание 6
Используя, оператор ANY, вывести отсортированный список дисциплин, которые задействованы в учебном плане.
Код запроса:
select код, Полное, для_группы, для_подгруппы from Дисциплины
where код=any (select distinct код_дисциплины from Учебный_план)
order by полное
Задание 7
Используя, оператор ALL, вывести записи из таблицы Дисциплины, при условии, что код дисциплины меньше среднего значения кода дисциплины из таблицы Учебный план.
Код запроса:
select * from дисциплины where код<all(select avg (код_дисциплины)from учебный_план ) order by полное