
- •Простая выборка
- •Исключение дубликатов
- •Выборка вычисляемых значений.
- •Выборка с использованием фразы where и упорядочением.
- •Агрегирование данных.
- •Агрегирование данных с использованием фразы having
- •Естественное соединение таблиц
- •Соединение таблицы со своей копией
- •Вложенные подзапросы
- •Объединение запросов
- •Представления Создание таблиц и заполнение их данными
Естественное соединение таблиц
28) Используя опыт, полученный при реализации запроса 23, выведите таблицу со средними оценками студентов вашей группы (Номер, ФИО, Ср_оценка).
При составлении запроса следует учитывать, что группы с таким же номером существовали и в прошлые годы, а присутствие студента в вашей группе должно быть подтверждено утвержденным приказом.
SELECT н_ведомости.члвк_ид номер, человек(н_ведомости.члвк_ид,'И') ФИО,
ROUND(AVG(TO_NUMBER(н_ведомости.оценка)),2) Ср_оценка
FROM н_ведомости, н_ученики
WHERE н_ведомости.члвк_ид=н_ученики.члвк_ид
AND SYSDATE BETWEEN н_ученики.начало AND н_ученики.конец
AND н_ученики.состояние='утвержден'
AND н_ведомости.оценка IN('5','4','3','2')
AND н_ведомости.состояние='актуальна'
AND н_ученики.группа='3100'
GROUP BY н_ведомости.члвк_ид;
29) Выполнить предыдущий запрос используя для получения номера, фамилии, имени и отчества студента не функцию Человек, а текстовую строку, полученную из таблицы Н_ЛЮДИ примерно так, как формировался запрос 8.
SELECT н_ведомости.члвк_ид номер,
н_люди.фамилия||' '||н_люди.имя||' '||н_люди.отчество||' ' ФИО,
ROUND(AVG(TO_NUMBER(н_ведомости.оценка)),2) Ср_оценка
FROM н_ведомости, н_ученики, н_люди
WHERE н_ведомости.члвк_ид=н_ученики.члвк_ид
AND SYSDATE BETWEEN н_ученики.начало AND н_ученики.конец
AND н_ученики.состояние='утвержден'
AND н_люди.ид=н_ведомости.члвк_ид
AND н_ведомости.оценка IN('5','4','3','2')
AND н_ведомости.состояние='актуальна'
AND н_ученики.группа='3100'
GROUP BY н_ведомости.члвк_ид, н_люди.фамилия, н_люди.имя, н_люди.отчество;
30) Составить запрос, позволяющий получить таблицу направлений (специальностей и специализаций), имеющую следующий вид:
ИД |
Уров |
Дата_ГОС |
Направление/специальность |
Тип стандарта |
| |
68 |
3 |
01.03.1995 |
552800 |
Информатика и вычислительная техника |
Направление подготовки магистров | |
143 |
3 |
01.03.1995 |
552811 |
Базы данных |
Магистерская программа | |
144 |
3 |
01.03.1995 |
552813 |
Сети ЭВМ и телекоммуникации |
Магистерская программа | |
145 |
3 |
01.03.1995 |
552820 |
Системы реального времени |
Магистерская программа | |
700 |
3 |
01.03.2000 |
220100 |
Вычислительные машины, комплексы, системы и сети |
Специальность | |
1251 |
3 |
01.03.2000 |
220104 |
Системы телекоммуникаций и компьютерной безопасности |
Специализация | |
792 |
3 |
01.03.2000 |
220109 |
Технология разработки программных систем |
Специализация | |
1250 |
3 |
01.03.2000 |
220111 |
Открытые информационно-вычислительные системы |
Специализация | |
1249 |
3 |
01.03.2000 |
220112 |
Информационно-управляющие системы |
Специализация |
SELECT н_направления_специал.ид, н_направления_специал.уровень, н_направления_специал.дата_гос,
н_напр_спец.код_напрспец ||' '|| н_напр_спец.наименование "Направление / Специальность",
н_типы_стандартов.наименование "Тип стандарта"
FROM н_направления_специал
JOIN н_напр_спец ON н_направления_специал.нс_ид=н_напр_спец.ид
JOIN н_типы_стандартов ON н_направления_специал.тс_ид=н_типы_стандартов.ид;
31) Преобразовать предыдущий запрос так, чтобы в получаемой таблице перед столбцом «Тип стандарта» появился столбец «Квалификация»
SELECT н_направления_специал.ид, н_направления_специал.уровень, н_направления_специал.дата_гос,
н_напр_спец.код_напрспец ||' '|| н_напр_спец.наименование "Направление / Специальность",
н_квалификации.наименование "Квалификация", н_типы_стандартов.наименование "Тип стандарта"
FROM н_направления_специал
JOIN н_напр_спец ON н_направления_специал.нс_ид=н_напр_спец.ид
JOIN н_типы_стандартов ON н_направления_специал.тс_ид=н_типы_стандартов.ид
JOIN н_квалификации ON н_направления_специал.квал_ид=н_квалификации.ид;
32) Получить список студентов, зачисленных первого сентября позапрошлого учебного года на первый курс очной формы обучения специальности 220100. В результат включить:
номер группы,
номер, фамилию, имя и отчество студента,
номер и состояние пункта приказа,
признак, характеризующий состояние студента,
дату конца действия этого пункта,
Результат упорядочить по номеру группы и фамилии.
SELECT v.группа, v.члвк_ид, l.фамилия, l.имя, l.отчество,
v.п_пркок_ид, v.состояние, v.признак, v.конец
FROM н_ученики v,
н_люди l,
н_планы p,
н_напр_спец n,
н_направления_специал ns,
н_формы_обучения f
WHERE l.ид=v.члвк_ид
AND ns.ид=p.напс_ид
AND p.ид=v.план_ид
AND ns.нс_ид=n.ид
AND p.фо_ид=f.ид
AND f.наименование='Очная'
AND p.курс=1
AND n.код_напрспец=230101
AND p.учебный_год='2005/2006'
AND v.начало='1.9.2005'
ORDER BY v.группа, l.фамилия;
33) Получить список студентов, по условиям п. 32, сохранив в нем только те строки, в которых состояние пунктами приказа равно 'утвержден'.
SELECT v.группа, v.члвк_ид, l.фамилия, l.имя, l.отчество, v.п_пркок_ид, v.состояние, v.признак, v.конец
FROM н_ученики v, н_люди l, н_планы p, н_напр_спец n, н_направления_специал ns,
н_формы_обучения f
WHERE l.ид=v.члвк_ид
AND ns.ид=p.напс_ид
AND p.ид=v.план_ид
AND ns.нс_ид=n.ид
AND p.фо_ид=f.ид
AND f.наименование='Очная'
AND p.курс=1
AND n.код_напрспец=230101
AND p.учебный_год='2006/2007'
AND v.начало='1.9.2006'
AND v.состояние='утвержден'
ORDER BY v.группа, l.фамилия;
34) Получить список студентов по условиям п. 33, но только на конец учебного года (31 августа).
SELECT v.группа, v.члвк_ид, l.фамилия, l.имя, l.отчество,
v.п_пркок_ид, v.состояние, v.признак, v.конец
FROM н_ученики v,
н_люди l,
н_планы p,
н_напр_спец n,
н_направления_специал ns,
н_формы_обучения f
WHERE l.ид=v.члвк_ид
AND ns.ид=p.напс_ид
AND p.ид=v.план_ид
AND ns.нс_ид=n.ид
AND p.фо_ид=f.ид
AND f.наименование='Очная'
AND p.курс=1
AND n.код_напрспец=230101
AND p.учебный_год='2006/2007'
AND v.начало='1.9.2006'
AND v.конец='31.08.2007'
AND v.состояние='утвержден'
ORDER BY v.группа, l.фамилия;
35) Получить список студентов, зачисленных первого сентября позапрошлого учебного года на первый курс очно-заочной(вечерней) формы обучения специальности 230101. В результат включить: номер группы, номер, фамилию, имя и отчество студента,
Результат упорядочить по номеру группы и фамилии.
SELECT v.группа, v.члвк_ид, l.фамилия, l.имя, l.отчество
FROM н_ученики v,
н_люди l,
н_планы p,
н_напр_спец n,
н_направления_специал ns,
н_формы_обучения f
WHERE l.ид=v.члвк_ид
AND ns.ид=p.напс_ид
AND p.ид=v.план_ид
AND ns.нс_ид=n.ид
AND p.фо_ид=f.ид
AND f.наименование='Очно-заочная(вечерняя)'
AND p.курс=1
AND n.код_напрспец=230101
AND p.учебный_год='2006/2007'
AND v.начало='1.9.2006'
AND v.конец='31.08.2007'
ORDER BY v.группа, l.фамилия;
Используя опыт, полученный при реализации запроса 23, выведите таблицу со средними оценками всех студентов (Номер, ФИО, Ср_оценка).
SELECT н_ведомости.члвк_ид номер, человек(н_ведомости.члвк_ид,'И') ФИО,
ROUND(AVG(TO_NUMBER(н_ведомости.оценка)),2) Ср_оценка
FROM н_ведомости, н_ученики
WHERE н_ведомости.члвк_ид=н_ученики.члвк_ид
AND н_ученики.состояние='утвержден'
AND н_ведомости.оценка IN('5','4','3','2')
AND н_ведомости.состояние='актуальна'
GROUP BY н_ведомости.члвк_ид;