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. Список литературы.
1) «Введение в системы баз данных» К.Дж.Дейт, издательство «Питер», СПб 2002г.
2) «Базы данных: модели, разработка, реализация» учебник под редакцией Т.Карповой, издательство «Питер», СПб 2001г.
3) «Системы баз данных» Г.Гаремо-Малино, Москва 2003г.
8. Список литературы.
4) «Введение в системы баз данных» К.Дж.Дейт, издательство «Питер», СПб 2002г.
5) «Базы данных: модели, разработка, реализация» учебник под редакцией Т.Карповой, издательство «Питер», СПб 2001г.
6) «Системы баз данных» Г.Гаремо-Малино, Москва 2003г.
[1] Сравнительный анализ реляционного исчисления и реляционной алгебры.
... ) AND FORALL СОТР2 (СОТР1.СОТР_ЗАРП > СОТР2.СОТР_ЗАРП) Здесь мы имеем два связанных вхождения переменной СОТР2 с совершенно разным смыслом. 5.2.2. Целевые списки и выражения реляционного исчисления Итак, WFF обеспечивают средства формулировки условия выборки из отношений БД. Чтобы можно было использовать исчисление для реальной работы с БД, требуется еще один компонент, который определяет ...
... 2935 Петров 144,000 310 2936 Сидоров 92,000 313 2937 Федоров 110,000 310 2938 Иванова 112,000 315 Нормализованные отношения составляют основу классического реляционного подхода к организации баз данных. Они обладают некоторыми ограничениями (не любую информацию удобно представлять в виде плоских таблиц), но существенно упрощают манипулирование данными. Рассмотрим, например, два ...
... , но не совпадающие понятия. Различия между отношениями и таблицами будут рассмотрены ниже. Термины, которыми оперирует реляционная модель данных, имеют соответствующие "табличные" синонимы: Реляционный термин Соответствующий "табличный" термин База данных Набор таблиц Схема базы данных Набор заголовков таблиц Отношение Таблица Заголовок отношения Заголовок таблицы Тело ...
... став вторичного ключа, не может принимать значение NULL. Перекрывающиеся ключи — сложные ключи, которые имеют один или несколько общих столбцов. Связанные отношения В реляционной модели данные представляются в виде совокупности взаимосвязанных таблиц. Подобное взаимоотношение между таблицами называется связью (rilationship). Таким образом, еще одним важным понятием реляционной модели является ...
0 комментариев