Читайте также:
|
|
Подзапросы.
1. Подзапросы с подмножеством
Получить список студентов - задолжников
SELECT *
FROM studs
WHERE n_stud IN
(SELECT n_stud
FROM kurs_stud
WHERE n_otmetka=2 OR EMPTY(n_otmetka))
В нижнем запросе (который собственно и называется подзапросом), строится виртуальная таблица (подмножество), включающая в себя всех задолжников. В верхнем запросе каждая запись анализируется на принадлежность к этому подмножеству и соответственно печатаются поля записи, входящей в это подмножество.
2. Подзапросы с EXISTS и NOT EXISTS
EXISTS означает примерно "если подмножество не пусто", соотвественно NOT EXISTS означает "если подмножество пусто". Используются в подзапросах.
Найти всех преподавателей, которые не ведут ни одного предмета
SELECT *
FROM preps
WHERE NOT EXISTS
(SELECT *
FROM kurs_grup
WHERE preps.n_prep = kurs_grup.n_prep)
Haйти всех студентов из группы М-101, у которых есть хоть одна 3-ка.
SELECT *
FROM studs
WHERE n_grupa IN
(SELECT n_grupa FROM grups WHERE c_grupa='M-101')
AND EXISTS
(SELECT *
FROM kurs_stud
WHERE studs.n_stud=kurs_stud.n_stud
AND n_otmetka = 3)
Контрольные задания.
1. Получить список студентов с указанием группы, у которых нет отметок. (Нет записей в таблице KURS_STUD)
2. Получить список предметов, которые неизвестно кто ведет.
Группировка данных
Данные в одной таблице группируются по какому-то полю, значение которого не уникально, обычно являющегося вторичным ключем.
Найти, сколько студентов в каждой группе
SELECT n_grupa, COUNT(*)
FROM studs
GROUP BY n_grupa
Группировка идет по полю n_grupa - все данные с одинаковым значением этого поля группируются и подсчитывается число записей в каждой такой группе.
Группировать можно и данные из разных таблиц.
Количество часов по лекциям и практикам отдельно на каждой кафедре
SELECT preps.n_kaf, kurs.c_priznak, SUM(kurs.n_time)
FROM preps, kurs, kurs_grup
WHERE preps.n_prep=kurs_grup.n_prep
AND kurs.n_lekz=kurs_grup.n_lekz
GROUP BY preps.n_kaf, kurs.c_priznak
Отбор групп.
Выбирать можно не только записи, но и группы.
Напечатать список групп, в которых количество пятерок у студентов больше 10 на группу.
SELECT grups.c_grupa, 'кол-во пятерок ',COUNT(*)
FROM grups, studs, kurs_stud
WHERE grups.n_grupa=studs.n_grupa
AND studs.n_stud=kurs_stud.n_stud
AND kurs_stud.n_otmetka=5
GROUP BY grups.c_grupa
HAVING COUNT(*) > 10
Контрольные задания.
1. Посчитать количество студентов каждого преподавателя.
2. Посчитать, сколько зачетов и экзаменов должен принять каждый преподаватель.
3. Найти студентов, которые не сдали 2 и более предметов.
4. Найти группу с наиболее большим количеством задолжников..
Вставка записей в таблицу.
1. Прямое занесение данных
"вручную" в таблицу кафедр с вычислением уникального ключа
INSERT (n_kaf, c_kaf, N_kol, c_sav, n_kol_kurs)
INTO kafedr
VALUES (5, "Мет.Оптимизации", 0, 'Не знаю', 30)
Самостоятельно занесите еще несколько записей.
2. Вставка записей из другой таблицы.
То же с вычислением уникального ключа
INSERT INTO kafedr(n_kaf, c_kaf, N_kol, c_sav, n_kol_kurs)
SELECT max(n_kaf),'Следующая кафедра',0, 'Не знаю', 0
FROM kafedr
Мат. Анализ читается у всех групп 1 курса мат. Факультета. У всех ведет Воронин.
Внести соответствующие записи в таблицу KURS_GRUP
INSERT INTO kurs_grup(n_lekz, n_grupa, n_prep)
SELECT kurs.n_lekz, grups.n_grupa, 1
FROM kurs, grups
WHERE kurs.n_lekz='Мат.анализ'
AND grups.n_kurs=1
3. Контрольные задания.
Вставить в таблицу KURS_STUD всех студентов 1-го курса и все предметы, которые у них ведутся из таблицы KURS_GRUP. Отметки расставить случайным образом.
Дата добавления: 2015-12-08; просмотров: 100 | Нарушение авторских прав