[МУЗЫКА] [МУЗЫКА] Кроме теоретико-множественных операций, мы можем производить с отношениями свойственные только им операции, которые называются реляционными. Это операции селекции (или ограничения), операции проекции, соединение отношений по условию (или делать естественные соединения) и операции деления отношений. Рассмотрим селекцию. Под операцией селекции мы понимаем «горизонтальный срез» отношения. Результатом операции селекции является множество строк в таблице, удовлетворяющих заданному условию — условию, по которому мы можем производить выборку. Что является этим условием? Условием может быть любое логическое выражение. Записывается это схематично, например: R where f, где R — это наше исходное выражение, а f — формула, в которой заложено логическое условие. Условие может состоять из нескольких простых условий, которые мы можем связать обычными булевскими операторами «и», «или» и «не». Что будет результатом селекции? Это будет отношение, заголовок которого совпадает с заголовками исходного отношения-операнда, а в тело отношения будут входить те строки, для которых заданные условия удовлетворяются. Например, рассмотрим отношение студентов, которые изучали предметы. У нас в отношении есть столбцы номера зачетки, фамилии, имени, отчества студента, и название предмета. Сделаем выборку, какие предметы изучал студент Сидоров. Делаем выборку, ограничивая значение столбца [ФИО студента] и мы получаем отношения с такими же столбцами, но с двумя строками, соответствующими нашей выборке. Следующее отношение — проекция. Под проекцией мы понимаем «вертикальный срез» отношения. Делая проекцию, мы выбираем из наших отношений некоторые столбцы. Атрибутами результирующего отношения является какое-то подмножество атрибутов исходного. Дадим синтаксис операции проекции. Мы рассматриваем отношение R с атрибутами a (a1, 12 и так далее). У нас есть некое подмножество атрибутов нашего отношения, это x, y, z, и мы делаем проекцию на наше отношение по атрибутам x, y, z, выбирая из нашего отношения только указанные столбцы. При этом мы помним требование теории множества об отсутствии дубликатов в нашем отношении, поэтому, если в результате проекции какие-то строки будут дублированы, то в результирующее множество они попадут лишь в одном экземпляре. Рассмотрим операцию соединения. Для этого нам необходимо иметь два отношения и правило, по которому мы будем их объединять. Можно записать его как A JOIN B WHERE некое условие f. Что будет являться результатом операции соединения по условию? Мы должны будем сделать декартово произведение двух отношений, и после этого взять из этого декартова произведения подмножество строк, которое удовлетворяет заданному нами условию. Давайте рассмотрим на примере. Будем соединять таблицу мальчиков и девочек, задав правило: чтобы в паре мальчик был выше девочки. Мы произведем декартово произведение, то есть возьмем все возможные пары мальчиков и девочек и после этого выберем из получившейся таблицы те строки, в которых мальчик выше девочки, то есть строки, удовлетворяют заданному нами условию. Результатом операции соединения будет таблица с четырьмя столбцами, в которой будет рост мальчика, рост девочки, имя мальчика, имя девочки. То есть мы получили объединение в заголовке таблицы — объединение атрибутов наших исходных отношений. Следующая операция соединений называется естественной. Почему она так называется? Потому что мы пытаемся соединить отношения, в которых есть один общий атрибут, который может быть и составным, а может быть и отдельным атрибутом. То есть мы предполагаем, что в наших отношениях есть один атрибут, который встречается и там и там, и мы соединяем наши отношения по совпадающим значениям этого атрибута. Результатом операции естественного соединения является отношение, атрибутами которого будет объединение атрибутов всех исходных отношений. А строки формируются на основе соединений строк исходных отношений по равенству совпадающего атрибута. Приведем пример. У нас есть таблица студентов. У каждого студента есть номер зачетки, фамилия, имя, отчество студента и название предмета. И есть таблица с аудиториями, в которых эти предметы преподаются. Как логично соединить эти таблицы? По совпадению предметов, чтобы знать, в какую аудиторию студент должен пойти, чтобы изучить определенный предмет. Вот результат операции соединения мы видим на экране. Мы уже не пишем операцию, по которой мы проводим это соединение. Мы понимаем, что мы соединяем две таблицы по совпадающему значению в одинаковых столбцах. Можно выразить операцию естественного соединения через другие реляционные операции. Для этого мы сначала должны будем сделать декартово произведение двух таблиц, потом выбрать из получившегося отношения те строки, которые удовлетворяют условию совпадения по одноименным атрибутам, и в конце выполнить проекцию, чтобы убрать повторяющийся атрибут. Последняя операция, которую мы рассмотрим, это операция деления. Ее сложно объяснить, но очень легко пояснить примером. Надеюсь, что вам будет понятно. Мы рассматриваем отношение A, в котором есть атрибуты X и Y, и отношение B с атрибутом Y, и пытаемся найти частное, то есть поделить отношение A на отношение B. Результатом этого деления будет отношение C с атрибутом X, тело которого состоит из кортежей <x> таких, что в теле отношения A содержатся кортежи <x, y> для любого <y> из B. Что это означает? Запросы, реализуемые с помощью операции деления, обычно в своей формулировке имеют слово «все». Давайте напишем формулы, что если мы полагаем отношение C результатом деления отношения A на отношение B, то при этом декартово произведение отношений C и B должно содержаться в A. Давайте рассмотрим пример. У нас есть отношение студента, в котором написано номер зачетки, ФИО студента и изучаемые студентом предметы. И есть отношение, в котором написан набор предметов. В данном случае это английский и программирование. Нас интересуют те студенты, которые изучили все предметы. Для того чтобы узнать этот набор студентов, мы должны поделить отношение R на отношение C. Таим образом, на экране мы видим список студентов, их всего двое, которые изучают оба предмета, упомянутые в отношении C. Итак, мы изучили с вами операции реляционной алгебры: селекцию, проекцию, соединение и деление. И рассмотрели на примерах, как выполняются эти операции.