
- •1.1.Введение
- •1.1.1.Термины и определения
- •1.1.2. Основные функции субд
- •1.1.3. Классификация субд
- •1.1.4. Возможности субд
- •1.2. Обзор структуры субд
- •1.2.1.Источники управляющих инструкций
- •1.2.2.Обработка запросов
- •1.2.3. Менеджеры буферов и хранения данных
- •1.2.4. Обработка транзакций
- •1.2.5.Процессор запросов
- •2.2. Программирование приложений баз данных
- •2.3. Реализация систем баз данных
- •3.1.2.Домен
- •3.1.3. Схема отношения, схема базы данных
- •3.1.4. Кортеж, отношение
- •2.1. Проектирование баз данных
- •3.1.2.Домен
- •3.1.3. Схема отношения, схема базы данных
- •3.1.4. Кортеж, отношение
- •3.2. Фундаментальные свойства отношений
- •3.3. Реляционная модель данных
- •4.4. Специальные реляционные операции
- •5.2.Исчисление кортежей
- •5.2.1.Правильно построенные формулы
- •5.2.2. Кванторы, свободные и связанные переменные
- •5.2.3.Целевые списки и выражения реляционного исчисления
- •Лекция 6. Функциональные зависимости и декомпозиция без потерь Учебные вопросы
- •6.2. Замыкание множества функциональных зависимостей
- •6.3. Аксиомы Армстронга.
- •6.4.Замыкание множества атрибутов
- •6.5. Минимальное покрытие множества функциональных зависимостей
- •6.6.Декомпозиция без потерь и функциональные зависимости
- •6.7. Корректные и некорректные декомпозиции отношений. Теорема Хита
- •6.8. Диаграммы функциональных зависимостей
- •7.1. Введение
- •7.1. Введение
- •7.2. Минимальные функциональные зависимости и вторая нормальная форма
- •8.1. Введение
- •8.1. Введение
- •8.2. Многозначные зависимости и четвертая нормальная форма
- •8.2.1. Аномалии обновлений при наличии многозначных зависимостей и возможная декомпозиция
- •8.2.2. Многозначные зависимости. Теорема Фейджина. Четвертая нормальная форма
- •8.2.3. Лемма Фейджина
- •8.2.4. Теорема Фейджина
- •8.3. Зависимости проекции/соединения и пятая нормальная форма
- •8.3.2. Зависимость проекции/соединения
- •8.3.3. Аномалии, вызываемые наличием зависимости проекции/соединения
- •8.3.4. Устранение аномалий обновления в 3-декомпозиции
- •8.3.5. Пятая нормальная форма
- •Лекция 9. Sql язык структурированных запросов
- •9.1. Введение
- •9.2. Функции языка sql
- •9.3 История
- •9.4.Вопросы совместимости
- •9.5. Преимущества и недостатки
- •9.5.1. Преимущества
- •1. Независимость от конкретной субд
- •2. Наличие стандартов
- •3. Декларативность
- •9.5.2.Недостатки
- •1. Несоответствие реляционной модели данных
- •9.7. Проекция в sql
- •9.8. Выбор в sql
- •9.9. Сравнение строк
- •9.10. Запросы к нескольким отношениям9.10.1. Декартово произведение и соединение в sql
- •Дисциплина “Обработка информации баз данных и знаний” Лекция 10. Sql язык структурированных запросов
- •10.1.2. Объединение, пересечение и разность запросов
- •10.2. Подзапросы
- •10.2.1. Подзапросы для вычисления скалярных значений
- •10.2.2. Условия уровня отношения
- •10.2.3. Условия уровня кортежа
- •10.2.4. Коррелированные подзапросы
- •10.2.5. Подзапросы в предложениях from
- •10.2.6. Выражения соединения в sql
10.2.2. Условия уровня отношения
В SQL предусмотрен ряд операторов, которые применяются к некоторому отношению R в целом и возвращают булево значение. В данном случае R - итог выполнения определенного подзапроса вида "select-from-where".
Некоторые из упомянутых операторов - IN, ALL и ANY - вначале рассмотрим в их простой форме, когда подзапрос возвращает скалярное значение s. В этой ситуации подразумевается, что отношение R содержит только один атрибут.
Определения операторов:
1. Условие EXISTS R равно TRUE, если и только если R не пусто.
2. Условие s IN R равно TRUE, если и только если s равно одному из значений в R. Напротив, условие s NOT IN R обращается в TRUE, если и только если, s не равно ни одному из значений в R.
3. Условие s > ALL R равно TRUE, если и только если s превосходит все значения в R. Оператор > может быть заменен любым из пяти других операторов сравнения (=, >=, <, <= и <>); соответственно изменится и смысл условия в целом: например, условие s < ALL R равно TRUE, если и только если s меньше всех значений в R. Выражения s <> ALL R и s NOT IN R эквивалентны.
-
Условие s > ANY R равно TRUE, если и только если s превосходит по меньшей мере одно значение в R. Оператор> может быть заменен любым из пяти других операторов cравнения. Выражения s = ANY R и s IN R эквивалентны.
10.2.3. Условия уровня кортежа
Задание 6. Найти имена продюсеров всех кинофильмов, в съемках которых принимал участие актер Гаррисон Форд.
В запросе используются три отношения из "кинематографической" базы данных
Movie (title, year, length, inColor, studioName, producerC#)
StarsIn (movieTitle, movieYear, starName)
MovieExec (name, address, cert#, netWorth),
Запрос содержит два подзапроса, вложенных один в другой.
1) SELECT nаmе
2) FROM MovieExec
3) WНERE cert# IN
4) (SELECT producerC#
5) FROM Movie
6) WНERE (title, year) IN
7) (SELECT movieTitle, movieYear
8) FROM StarsIn
9) WНERE starName = 'Harrison Ford‘));
10.2.4. Коррелированные подзапросы
Подзапросы самых простых типов могут выполняться только один раз, и их результаты используются во "внешних" запросах. В более сложных случаях подзапрос должен обрабатываться многократно, по одному разу для каждого значения, получаемого подзапросом извне. Подобные подзапросы принято называть коррелированными (correlated subquery).
Задание 7. Найти все кинофильмы, названия которых повторяются два раза и более. Начнем с построения внешнего запроса, который предполагает просмотр всех кортежей отношения
Movie(title, year, length, inColor, studioName, producerC#).
Для каждого из кортежей выполняется подзапрос, призванный определить, существуют ли другие кинофильмы с тем же названием и датой выпуска, превосходящей значение даты для текущего кортежа-"кинофильма".
1) SELECT title
2) FROM Movie 0ld
3 ) WНERE year < ANY
4) (SELECT year
5) FROM Movie
б) WНERE title = Old.title ) ;
Рассмотрим вначале внутренний запрос, определенный в строках 4-6. Если мысленно заменить атрибут Old.title конкретным строковым значением, таким как 'King Kong', станет ясно, что подзапрос предполагает поиск значений года выпуска всех кинофильмов с названием "Кing Kong", но отличается от подзапроса, описанного в строках 7-9 запроса к заданию 6, тем, что точное значение Old.title заранее не известно.
Однако по мере просмотра кортежей Movie в процессе обработки внешнего запроса (см. строки 1-3) каждый из них предоставляет значение Old.title для использования во вложенном запросе с целью вычисления условия предложения WНERE, охватывающего строки 3-6.
Условие, заданное в строке 3, выполняется, если любой кинофильм с названием, совпадающим с содержимым Old.title, обладает большим значением year, нежели то, которое хранится в кортеже, представляемом текущим значением переменной кортежа Old. Условие сохраняет значение TRUE, если только содержимое компонента year переменной кортежа Оld не равно максимальной из дат выпуска кинофильмов с тем же названием. Следовательно, при выполнении строк 1-3 запроса будет возвращено количество копий определенного названия, на единицу меньщее общего количества фильмов с этим названием: строка, использованная в качестве названия фильмов дважды, будет выведена один раз, одинаковое название трех фильмов в итоговом отношении будет упомянуто два раза и т.д.