- •Основные требования к организации базы данных
- •Основные компоненты субд
- •Три уровня представления данных в аис.
- •Классификация моделей данных
- •Инфологическое моделирование
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных. Элементы модели
- •Правила вывода функциональной зависимости
- •Реляционная алгебра
- •Нфсо, нф1, нф2
- •Нормальная форма Бойса - Кодда(нфбк)
- •Минимальное покрытие
- •Обобщённый алгоритм декомпозиции:
- •Соединение без потерь, сохраняющих зависимость
- •Метод Табло
- •Язык запросов sql. Основные категории
- •Язык запросов sql. Тип связывания
- •Многотабличные запросы. Использование псевдонимов
- •Использование оператора union для объединения результатов инструкций select
- •Модели транзакций. Журнал транзакций.
- •Основные компоненты субд Cache'
- •Файлы прямого и последовательного доступа
- •Инвертированные списки
- •Многозначная зависимость
- •Модель удаленного доступа к данным
- •Постреляционная модель данных
- •Многомерные модели
- •Распределенная обработка данных
- •Плотный, неплотный индекс
- •Модель сервер-приложение
- •Организация индексов в виде в-деревьев
- •Реляционное исчисление с переменными на доменах
- •Реляционное исчисление с переменными кортежами
- •Модель активного сервера
- •Модель файлового сервера
- •Субд Cache. Виды классов. Элементы классов
Многотабличные запросы. Использование псевдонимов
Пример: пусть необходимо поставить в соответствие преподавателей и учебные предметы, которые он ведет
Предполагается, что созданы следующие таблицы:
STUDENT (SNUM, SFAM, SIMA, STIP) USPEV (UNUM, OCENKA, UDATA, SNUM, PNUM) PREDMET (PNUM, PNAME, TNUM) TEACHER (TNUM, TFAM, TIMA, TDATE)
UDATA – дата оценки
TDATE – день рождения учителя
Вывод фамилии преподавателя и предмет, который он ведет
SELECT TEACHER.TFAM, PREDMET.PNAME; FROM TEACHER, PREDMET;
WHERE TEACHER.TNUM=PREDMET.TNUM
Эти таблицы уже были соединены через поле TNUM. Эта связь называется состоянием справочной целостности. Объединение многотабличных запросов, которые используют предикаты, основанные на равенствах – объединение по равенству. Этот же подход может использоваться для объединения вместе двух копий одиночной таблицы. Когда объединяется таблица сама с собой, все повторяемые имена столбца заполняются префиксами имени таблицы. Чтобы ссылаться к этим столбцам внутри запроса, необходимо иметь 2 различных имени для этой таблицы. Это можно сделать с помощью определения временных имен, называемых псевдонимами, которые определяются в предложении FROM запроса.
Вывод фамилий студентов, имеющих одинаковый размер стипендии
SELECT FIRST.SFAM, SECOND.SFAM, FIRST.STIP; FROM STUDENT FIRST, STUDENT SECOND; WHERE FIRST.STIP=SECOND.STIP
FIRST, SECOND - псевдонимы
В данном запросе SQL ведет себя так, как если бы он соединял 2 различные таблицы, называемые FIRST и SECOND. Псевдоним существует только тогда, команда выполняется, а после завершения запроса псевдоним больше не имеет никакого значения. Допускается использовать любое число псевдонимов для одной таблицы запросов.
Для назначения стипендии на следующий семестр, необходимо просмореть все варианты комбинаций студентов с разными размерами стипендий 25%, 15%, 0%
SELECT FIRST.SFAM, SECOND.SFAM, THIRD.SFAM; FROM STUDENT FIRST, STUDENT SECOND, STUDENT THIRD;
WHERE FIRST.STIP=25 AND SECOND.STIP=15 AND THIRD.STIP=0
Этот запрос находит все комбинации студентов с 3-мя различными размерами стипендии. Такой запрос может быть выполнен с помощью GROUP BY и ORDER BY, поскольку они сравнивают значение только в одном столбце вывода.
В SQL предусматривается создание объединения, которое включает и различные таблицы и псевдонимы одной таблицы.
4. Написать запрос, который объединяет таблицу с данными об успеваемости для того, чтобы найти учебные предметы, которые уже сданы более, чем одним студентом и таблицу учебных предметов.
SELECT PREDMET.PNAME, FIRST.SNUM, SECOND.SNUM; FROM USP FIRST, USP SECOND, PREDMET; WHERE FIRST.PNUM=SECOND.PNUM; AND PREDMET.PNUM=FIRST.PNUM; AND FIRST.SNUM<SECOND.SNUM
Таким образом, операция объединения в SQL соединяет информацию из двух таблиц, формируя из них пары связанных строк. Объединяемую таблицу образуют пары тех строк из разных таблиц, у которых в связанных столбцах содержатся одинаковые значения.
Иногда необходимо использовать DISTINCT для того, чтобы в подзапросе получать одиночное значение.
5. Преподаватели могут вести занятия по разным дисциплинам. Написать запрос, выводящий дисциплины, которые ведет преподаватель Иванова.
SELECT * FROM PREDMET;
WHERE TNUM=(SELECT DISTINCT TNUM FROM TEACHER;
WHERE TFAM=’Иванова’)
В подзапросах допускается использование агрегатных функций, так как они автоматически производят одиночные значения для любого числа строк, которая может быть использована в основном запросе.
Вывести все оценки по учебным дисциплинам, значение которых выше среднего.
SELECT * FROM USP;
WHERE OCENKA > (SELECT AVG(OCENKA) FROM USP);