==Запросы. Мотивация==
Базы Предположим, что так или иначе мы научились проектировать базы данных. Теперь хотелось бы их использовать. Действительно, базы данных подразумевают не только хранение данныххранить данные, но и запросыделать выборки, позволяющие эти данные так или иначе получатьизменять их каким-либо образом. Для этого вводится понятие запроса. Как минимумПри первом рассмотрении, запросы нужны как минимум для выполнения следующих действий:* Выборка данных: достаем получить данные из БДбазы, чтобы тем или иным способом обрабатывать их как-то использовать уже извне;.* Область действия обновлений: часто в запросах обновления (напримерзапросы позволят указывать область действия тех или иных операций, что крайне полезно. Например, UPDATE к таким операциям относятся операции удаления или DELETE) необходимо изменения данных: хочется указывать область данных, на которые этот запрос распостраняется;какие именно записи эти операции подействуют.* Ограничения целостности: до сих пор было только два вида ограничений (ключи и внешние ключи). Использование запросов позволит расширить инструментарий;Некоторые базы данных позволяют создавать произвольные ограничения целостности, заданные на поддерживаемом языке. В рамках этих ограничений очень удобно пользоваться запросами.
* Ограничения доступа.
Одним из способов описания запросов является реляционная алгебра.
== Реляционная алгебра ==
В рамках курса рассматривается несколько подходов к описанию запросов. Один из них {{---}} реляционная алгебра.
{{Определение
|definition=
'''Реляционная алгебра''' {{---}} императивный язык для работы с отношениями. Носитель в терминах алгебры алгебра над отношениями {{---}} множество множеством всех [[Реляционная_модель_данных._Ключи|отношений]]. Далее будут определены операции, замкнутые над носителем, и ограничения, им соответствующие.
}}
В целом, реляционная алгебра {{---}} это императивный язык для работы с отношениями: он позволяет в явном виде, по действиям, описать, каким образом получить требуемый результат.
== Примеры операций ==
* Проекция: <tex>\pi_A(R)</tex>;* Естественное соединение: <tex>R_1 \bowtie R_2</tex>В качестве примеров рассмотрим несколько простых операций в рамках реляционной алгебры.
'''Замечание'''. Поскольку все операции в алгебре замкнуты по определению, можно комбинировать применения тех или иных операций любым разумным способом. Например* Проекция: <tex>\pi_A(R)</tex>. Проекция отношения <tex>R</tex> на набор атрибутов <tex>A</tex>.* Естественное соединение: <tex>R_1 \bowtie \pi_B(R_2)) \bowtie R_3</tex>. Естественное соединение отношений <tex>R_1</tex> и <tex>R_2</tex>.
== Отношения и Все операции ==в алгебре замкнуты по определению, поэтому можно комбинировать применения тех или иных операций любым разумным способом. Например: <tex>\pi_A(R_1 \bowtie \pi_B(R_2)) \bowtie R_3</tex>.
Для определения операций будет полезным уточнить, что такое отношение.{{Определение|definition='''Отношение''' {{---}} пара из заголовка и тела. }}= Операции ==
{{ОпределениеВ текущем контексте полезно уточнить, что именно понимается под операцией над отношениями в рамках реляционной алгебры. А именно, для того, чтобы определить операцию, необходимо определить следующее:|definition=* Правило построения заголовка по заданным отношениям.'''Операция''' {{---}} правило * Правило построения заголовка и тела по заданным отношениям, а так же набор условий.* Условия, при которых операция применимавыполнима, то есть ограничения на отношения, к которым она применяется.}}