Реляционное исчисление
THEN SP (S# : SX, P# : PX)
END IF)
6. Средства языка SQL.
Как уже говорилось в разделе «Сравнительный анализ реляционного исчисления и реляционной алгебры», в основу реляционного языка могут быть положены как реляционная алгебра, так и реляционное исчисление. Что же положено в основу языка SQL? Ответом будет №частично и то, и другое, а частично ни то, ни другое…». Когда язык SQL только разрабатывался, предполагалось что он будет отличаться как от реляционной алгебры, так и от реляционного исчисления. Действительно, именно этим мотивировалось введение в язык конструкции IN <подзапрос>. Однако со временем выяснилось, что язык SQL нуждается в определённых средствах как реляционной алгебры, так и исчисления, поэтому он был расширен для включения этих функций. На сегодняшний день ситуация складывается таким образом, что язык SQL в чём-то похож на реляционную алгебру, в чём-то на реляционное исчисление, а в чем-то отличается от них обоих.
Запросы в языке SQL формулируется в виде табличных выражений, которые потенциально могут иметь очень высокую степень сложности.
6.1. Примеры.
Для всех деталей указать номер и вес в граммах
SELECT P.P#, P.WEIGHT * 454 AS GMWT
FROM P;
Спецификация AS GMWT вводит соответствующее имя результирующего столбца. Таким образом, два столбца результирующей таблицы будут называться P# и GMWT. Если бы спецификация AS GMWT была опущена, то соответствующий столбец был бы фактически безымянным. Отметим, что хотя в подобных случаях правила языка SQL в действительности не требуют от пользователя указания имени результирующего столбца.
Выбрать информацию обо всех парах поставщиков и деталей, находящихся в одном городе
В языке SQL существует несколько способов формулирования этого запроса. Приведем три самых простых.
1. SELECT S.*, P.P#, P.NAME, P.COLOR, P.WEIGHT
FROM S, P
WHERE S.CITY =P.CITY;
2. S JOIN P USING CITY;
3. S NATURAL JOIN P;
Результатом в каждом случае будет естественное соединение таблиц S и P (по атрибуту города CITY).
Первая формулировка заслуживает более подробного обсуждения. Именно одна из трёх предложенных вариантов является допустимой в первоначальной версии языка SQL (явная операция JOIN была добавлена в стандарт SQL/92). Концептуально можно рассматривать реализацию этой версии запроса следующим образом.
Во-первых, после выполнения предложения FROM мы получаем декартово произведение S TIMES P. (Строго говоря, перед вычислением произведения следовало бы позаботится о переименовании столбцов. Для простоты мы этого не делаем.)
Во-вторых, после выполнения предложения WHERE мы получаем выборку из этого произведения, в которой два значения атрибута CITY в каждой строке равны (иначе говоря, выполнено соединение таблиц поставщиков и деталей по эквивалентности их атрибутов городов).
В-третьих, после выполнения предложения SELECT мы получаем проекцию выборки по столбцам, указанным в предложении SELECT. Конечным результатом будет естественное соединение указанных таблиц.
Следовательно, предложение FROM в языке SQL соответствует декартову произведению, предложение WHERE ─ операции выборки, а совместное применение предложений SELECT-FROM-WHERE ─ проекции выборки произведения.
7. Заключение.
Мы рассмотрели реляционное исчисление, альтернативное реляционной алгебре.
Внешне два подхода очень отличаются: исчисление имеет описательный характер, тогда как характер алгебры ─ предписывающий, но на более низком уровне они представляют собой одно и то же, поскольку любые выражения исчисления могут быть преобразованы в семантически эквивалентные выражения алгебры и наоборот.
Реляционное исчисление существует в двух версиях: исчисление кортежей и исчисление доменов. Основное различие между ними состоит в том, что переменные исчисления кортежей изменяются на отношениях, а переменные исчисления доменов изменяются на доменах.
Выражение исчисления кортежей состоит из прототипа кортежа и необязательного предложения WHERE, содержащего логическое выражение или формулу WFF («правильно построенную формулу»). Подобная формула WFF может включать кванторы (EXISTS и FORALL), свободные и связанные ссылки на переменные, логические (булевы) операторы (AND, OR, NOTи др.) и т.д. Каждая свободная переменная, которая встречается в формуле WFF, также должна быть упомянута в прототипе кортежа.
Замечание. Здесь этот вопрос явно не затрагивался, но выражения реляционного исчисления предназначены, по существу, для тех же целей, что и выражения реляционной алгебры.
На примере было показано1, как алгоритм редукции Кодда может использоваться для преобразования произвольного выражения реляционного исчисления в эквивалентное выражение реляционной алгебры, таким образом подготавливая почву для выбора возможной стратегии реализации исчисления. Вновь обратившись к вопросу реляционной полноты, мы кратко обсудили, каким образом можно доказать, что некоторый язык L является полным в этом смысле.
Кроме того, здесь обсуждалось, как можно расширить исчисление кортежей с целью поддержки определённых вычислительных возможностей (аналогичные возможности в реляционной алгебре обеспечиваются операциями EXTEND и SUMMARIZE). Затем нам было представлено краткое введение в исчисление доменов и отмечено (правда, без попытки доказать это), что оно также является реляционно полным. Таким образом, исчисление кортежей, исчисление доменов и реляционная алгебра эквивалентны.
И наконец,
нашему вниманию
был представлен
обзор соответствующих
средств языка
SQL. Язык SQL
является своеобразной
смесью реляционной
алгебры и исчисления
(кортежей
).
Например, в нём
есть прямая
поддержка таких
операций реляционной
алгебры, как
соединение
и объединение,
но одновременно
с этим используются
переменные
кортежей и
квантор существования
из реляционного
исчисления.
SQL – запрос
представляет
собой табличное
выражение.
Обычно такая
конструкция
содержит единственное
выражение
выборки, однако
поддерживаются
и различные
типы явных
выражений
операций соединения
(JOIN), причём
выражения
соединения
и выборки могут
комбинироваться
произвольным
образом с помощью
операторов
UNION, INTERSECT
и EXCEPT. Также
упоминалось
о возможности
использования
предложения
ORDER BY для
определения
упорядоченности
строк в таблице,
являющейся
результатом
вычисления
данного табличного
выражения
(любого вида).
В частности, были описаны следующие компоненты выражений выборки.
Базовое предложение SELECT, в том числе использование ключевого слова DISTINCT, скалярных выражений, введение имён результирующих столбцов и использование предложения SELECT *
Предложение FROM, включая использование переменных кортежей
Предложение WHERE, включая использование оператора EXISTS
Предложение GROUP BY и HAVING, включая использование обобщающих функций COUNT, SUM, AVG, MAX и MIN
Использование подзапросов в предложениях SELECT, FROM и WHERE
Кроме того, здесь был описан концептуальный алгоритм вычисления (т.е. схема формального определения) для выражений выборки.
8. Список литературы.
«Введение в системы баз данных» К.Дж.Дейт, издательство «Питер», СПб 2002г.
«Базы данных: модели, разработка, реализация» учебник под редакцией Т.Карповой, издательство «Питер», СПб 2001г.
«Системы баз данных» Г.Гаремо-Малино, Москва 2003г.
8. Список литературы.
«Введение в системы баз данных» К.Дж.Дейт, издательство «Питер», СПб 2002г.
«Базы данных: модели, разработка, реализация» учебник под редакцией Т.Карповой, издательство «Питер», СПб 2001г.
«Системы баз данных» Г.Гаремо-Малино, Москва 2003г.
1 Сравнительный анализ реляционного исчисления и реляционной алгебры.