- •7. Ограничения уникальности
- •7. Ссылочная целостность и er-диаграммы
- •7. Ограничения ссылочной целостности
- •7. Ограничения других видов.
- •17. Минимальное покрытие множества функциональных зависимостей
- •27. Многозначные зависимости. Теорема Фейджина. Четвертая нормальная форма
- •27. Лемма Фейджина
- •27. Теорема Фейджина
- •37. Подзапросы
- •37. Коррелированные подзапросы
- •Простые объявления схем отношений
- •Модификация реляционных схем
- •Значения по умолчанию
- •Индексы
37. Подзапросы
Язык SQL позволяет использовать один запрос в качестве вспомогательного при вычислении результатов другого. Запрос, служащий частью более "крупного" запроса, принято называть подзапросом (subquery). Степень взаимной вложенности запросов не ограничивается и может быть произвольной. Вы уже знакомы с примерами подзапросов — в разделе 6.2.5 на с. 268 было показано, как с помощью операторов объединения (union), пересечения (intersect) и разности (except) осуществляется слияние двух подзапросов с целью получения результата общего запроса. Существуют и другие способы использования подзапросов, перечисленные ниже.
Запрос возвращает единственное значение, которое сравнивается с другим значением в условии предложения where.
Запрос возвращает отношение, используемое в предложении where с той или иной целью.
Запрос оперирует отношениями, перечисленными в предложении from.
37. Подзапросы для вычисления скалярных значений
Атомарное значение, способное выступать в роли содержимого одного компонента кортежа отношения, называют скаляром (scalar). Запросы вида "select—from—where" могут возвращать отношения с любым числом атрибутов и произвольным количеством кортежей. Однако зачастую требуется получить набор значений единственного атрибута. Более того, нередко результатом запроса является единственное значение, представляющее некоторый итог, вычисленный на основании содержимого целой группы компонентов.
Если запрос возвращает единственное значение, он может быть использован в качестве подзапроса, заключенного в круглые скобки и располагаемого в любом месте предложения where, где допустимо задать константу или имя атрибута .В этом случае операндом выражения сравнения будет значение, возвращаемое подзапросом.
37. Коррелированные подзапросы
Подзапросы самых простых типов могут выполняться только один раз, и их результаты используются во "внешних" запросах. В более сложных случаях подзапрос должен обрабатываться многократно, по одному разу для каждого значения, получаемого подзапросом извне. Подобные подзапросы принято называть коррелированными (correlated subquery). Рассмотрим пример, иллюстрирующий сказанное.
Простые объявления схем отношений
Конструкция объявления таблицы в своей простейшей форме состоит из пары служебных слов create table, после которой задаются наименование отношения, подлежащего созданию, и список пар названий атрибутов и их типов, заключенный в круглые скобки.
Модификация реляционных схем
Чтобы удалить (drop) отношение R из базы данных, достаточно выполнить команду
drop table r;
После обработки команды отношение R перестанет быть частью схемы базы данных, и в дальнейшем никто не сможет обратиться к его кортежам.
Гораздо чаще, однако, возникает необходимость изменения (altering) схемы существующего отношения. С этой целью используется команда вида alter table, содержащая наименование отношения, схема которого подлежит изменению, и одно из дополнительных предложений, наиболее важными из которых являются следующие:
add, с именем А атрибута и обозначением его типа ("добавить атрибут Л");
drop, с именем А атрибута ("удалить атрибут А").