- •История развития вычислительной техники
- •Файлы и файловые системы
- •Базы данных на больших эвм
- •Базы данных на персональных компьютеров
- •Распределенные базы данных
- •Основные понятия и определения
- •Классификация моделей данных
- •Язык манипулирования данными в иерархических базах данных
- •Теоретико-графовые модели данных
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных Основные определения
- •Операции над отношениями. Реляционная алгебра
- •Специальные операции реляционной алгебры
- •Языковые средства современных субд Некоторые термины и определения, используемые при работе с базами данных
- •История развития sql
- •Структура sql
- •Типы данных
- •Оператор выбора select
- •Применение агрегатных функций и вложенных запросов в операторе выбора select
- •Вложенные запросы
- •Внешние объединения
- •Операторы манипулирования данными
- •Insert into books values (‘3-77777-444-2’, ‘Сказки Пушкина’, ‘Пушкин а.С.’, ‘’, 2010, 316)
- •Insert into books (isbn, title, autor, yearizd, pages) values (‘3-77777-444-2’, ‘Сказки Пушкина’, ‘Пушкин а.С.’, 2010, 316)
- •Общая идея языка запросов (xPath)
- •Проектирование реляционных бд на основе принципов нормализации
- •Системный анализ предметной области
- •Пример системного анализа предметной области
- •Даталогическое проектирование для реляционной модели данных
- •Инфологическое проектирование
- •Модель "сущность-связь"
- •Переход к реляционной модели данных
- •Принципы поддержки целостности в реляционной модели данных
- •Операторы ddl в языке sql с заданием ограничений целостности
- •Средства определения схемы базы данных
- •Средства изменения описания таблиц и средства удаления таблиц
- •Понятие представления операции создания представлений
- •Горизонтальное представление
- •Вертикальное представление
- •Сгруппированные представления
- •Объединенные представления
- •Физические модели баз данных Файловые структуры, используемые для хранения информации в бд
- •Индексные файлы
- •Файлы с плотным индексом, или индексно-прямые файлы
- •Файлы с неплотным индексом, или индексно-последовательные
- •Организация индексов в виде b-tree (в-деревьев)
- •Инвертированные списки
- •Модели безфайловой физической организации данных
- •Архитектура разделяемой памяти
- •Распределенная обработка данных Архитектура и принципы распределенного подхода. Требования и критерии построения информационных систем на базе распределенных бд (рбд)
- •Многомерное представление данных. Хранилище данных и olap. Назначение. Основные характеристики
- •Основные элементы и операции olap
- •Типы olap. Преимущества и недостатки
- •Моделирование многомерных кубов в реляционной модели данных
- •Логическая модель рбд. Бизнес-логика файл-серверной, клиент-серверной и n-уровневой архитектуры Логическая модель рбд
- •Понятие транзакции. Неявные и явные транзакции. Уровни изолированности транзакций. Понятие блокировок. Основные типы блокировок Понятие транзакции. Неявные и явные транзакции
- •Уровни изолированности транзакций
- •Особенности реализации транзакций в Oracle и ms Sql Server Общие операторы управления транзакциями
- •Особенности субд Oracle
- •Особенности субд ms sql Server
- •Понятие блокировок. Основные типы блокировок
- •Взаимоблокировки
- •Репликация данных. Виды репликации
- •Синхронная репликация
- •Асинхронная репликация
- •Процедурные расширения языка sql
- •Основные характеристики pl/sql и t-sql
- •Хранимые процедуры и функции
- •Триггеры
- •Защита информации в базах данных
- •Проверка полномочий
- •Обобщенная архитектура субд
- •Оптимизация sql-запросов
- •Методы синтаксической оптимизации запросов
- •Методы семантической оптимизации запросов
- •Электронная библиотека
- •Учет успеваемости студентов
- •Склад товаров
- •Интернет-магазин
- •Медицинский центр
Вложенные запросы
С помощью SQL можно вкладывать запросы внутрь друг друга. Обычно внутренний запрос генерирует значение, которое проверяется в предикате внешнего запроса (в предложении WHERE или HAVING), определяющего, верно оно или нет. Совместно с подзапросом можно использовать предикат EXISTS, который возвращает истину, если результат подзапроса не пуст.
В части FROM оператора SELECT допустимо применять синонимы к именам таблицы, если при формировании запроса нам требуется более чем один экземпляр одной и той же таблицы. Синонимы задаются с использованием необязательного ключевого слова AS:
FROM R1 AS A, R1 AS B или FROM R1 A, R1 B
На примере БД «Сессия». Список тех, кто сдал все положенные экзамены:
SELECT ФИО FROM R1 as a WHERE Оценка > 2 GROUP BY ФИО HAVING COUNT(*) = (SELECT COUNT(*) FROM R2, R3 WHERE R2.Группа=R3.Группа AND R2.ФИО=a.ФИО)
Во встроенном запросе определяется общее число экзаменов, которые должен сдавать каждый студент, обучающийся в своей группе, и это число сравнивается с числом экзаменов, которые сдал данный студент.
Список тех, кто должен был сдавать экзамен по БД, но пока еще не сдавал.
SELECT ФИО FROM R2 a, R3 WHERE а.Группа=R3.Группа AND R3.Дисциплина = ‘БД’ AND
NOT EXISTS (SELECT ФИО FROM R1 WHERE R1.ФИО=a.ФИО AND R1.Дисциплина = ‘БД’)
Предикат EXISTS (SubQuery) истинен, когда результат подзапроса SubQuery не пуст, то есть содержит хотя бы одну строку, в противном случае предикат EXISTS ложен. Предикат NOT EXISTS обратно — истинен только тогда, когда результат SubQuery пуст.
NOT EXISTS с вложенным запросом позволяет обойтись без операции разности отношений. Например, формулировка запроса со словом "все" может быть выполнена как бы с двойным отрицанием. Рассмотрим пример базы, которая моделирует поставку отдельных деталей отдельными поставщиками:
SP <номер_поставщика, номер_детали>, P <номер_детали, наименование>
Найти поставщиков, которые поставляют все детали:
SELECT DISTINCT номер_поставщика FROM SP SP1 WHERE NOT EXISTS (SELECT номер_детали FROM P WHERE NOT EXISTS (SELECT * FROM SP SP2 WHERE P2.номер_поставщика=SP1.номер_поставщика AND sp2.номер_детали = P.номер_детали))
Фактически мы переформулировали этот запрос так: "Найти поставщиков таких, что не существует детали, которую бы они не поставляли". Этот же запрос может быть реализован и через агрегатные функции с подзапросом:
SELECT DISTINCT номер_поставщика FROM SP GROUP BY номер_поставщика HAVING COUNT(DISTINCT номер_детали) = (SELECT COUNT(номер_детали) FROM P)
В стандарте SQL92 операторы сравнения расширены до многократных сравнений с использованием ключевых слов ANY и ALL. Это расширение используется при сравнении значения определенного столбца со столбцом данных, возвращаемым вложенным запросом. Ключевое слово ANY, поставленное в любом предикате сравнения, означает, что предикат будет истинен, если хотя бы для одного значения из подзапроса предикат сравнения истинен. Ключевое слово ALL требует, чтобы предикат сравнения был бы истинен при сравнении со всеми строками подзапроса.
Например, найдем студентов, которые сдали все экзамены на оценку не ниже чем "хорошо". Работаем с БД «Сессия», но добавим к ней еще одно отношение R4, которое характеризует сдачу лабораторных работ в течение семестра:
R1 = <ФИО, Дисциплина, Оценка>; R2 = <ФИО, Группа>; R3 = <Группы, Дисциплина>; R4 = <ФИО, Дисциплина, Номерлабраб, Оценка>;
SELECT R1.ФИО FROM R1 WHERE 4 <= ALL (SELECT R11.Оценка FROM R1 AS R11 WHERE R1.ФИО = R11.ФИО)
Рассмотрим еще один пример. Выбрать студентов, у которых оценка по экзамену не меньше, чем хотя бы одна оценка по сданным им лабораторным работам по данной дисциплины:
SELECT R1.ФИО FROM R1 WHERE R1.Оценка >= ANY (SELECT R4.Оценка FROM R4 WHERE R1.Дисциплина = R4. Дисциплина AND R1.ФИО = R4.ФИО)
