Материал: Реляционная алгебра. Основы SQL

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

SUMMARIZE A BY (A1,A2,…,An) ADD EXP AS Z;

Здесь A1,A2,…,An - отдельные атрибуты отношения А. Результатом этого выражения будет отношение с заголовком {A1,A2,…,An,Z} и с телом, содержащим все такие кортежи t, которые являются кортежами проекции отношения А по атрибутам A1,A2,…,An, расширенного значением для нового атрибута Z. Такое новое значение Z подсчитывается вычислением итогового значения exp по всем кортежам отношения А, которое имеет те же самые значения для атрибутов A1,A2,…,An, что и кортеж t. Кардинальное число результирующего отношения равно кардинальному числу проекции отношения А по атрибутам A1,A2,…,An, а степень равна степени такой проекции плюс единица. Например, количество поставок, сделанных каждым поставщиком может быть получено при помощи выражения

SUMMARIZE Поставки BY (П№) ADD COUNT AS Кол_П;

Результат операции (рис. 4) не содержит сведений о поставках, сделанных поставщиком П5 (сравните с примером, показанным на рис. 1, где поставщик сделал ноль поставок). Причина состоит в том, что поставщика П5 нет в отношении ПОСТАВКИ.

П№

Кол_П

П1

6

П2

2

П3

1

П4

3

Рис. 4

Реляционная модель может включать также операции реляционного присвоения, которые дают возможность «запоминать» значение некоторых алгебраических выражений в базе данных и таким образом изменять состояние базы данных или, иначе говоря, обновлять базу данных:

Поставки := Поставки MINUS (Поставки WHERE Кол = 0);

В реляционных системах существуют также явные операторы обновления INSERT, DELETE и UPDATE:

INSERT (Поставщики where Гор_П = Минск ) into Temp;

(здесь выбранные данные вставлены в отношение Temp, которое должно быть совместимым по типу с отношением Поставщики).

Update (Поставщики where Гор_П = Брест) статус := 40;

DELETE Поставщики where Статус < 20;

Все операции обновления действуют на уровне множеств (например, операция DELETE удаляет множество кортежей из целевого отношения) и должны контролироваться с помощью предиката рассматриваемого отношения.

         Примеры использования реляционной алгебры для выражения словесных запросов в виде формул

1. Получить имена поставщиков, которые поставляют деталь Д2.

((Поставки JOIN Поставщики) WHERE Д№=’Д2’) [Имя_П];

. Получить имена поставщиков, которые поставляют по крайней мере одну черную деталь.

(((Детали WHERE Цв = ‘Черный’) JOIN Поставки) [П№] JOIN Поставщики) [Имя_П]

или

(((Детали WHERE Цв = ‘Черный’) [Д№] JOIN Поставки) JOIN Поставщики) [Имя_П]

. Получить имена поставщиков, которые поставляют все детали.

((Поставки [П№,Д№] DIVIDEBY Детали [Д№] JOIN Поставщики) [Имя_П]

. Получить номера поставщиков, которые поставляют по крайней мере все те детали, которые поставляет поставщик П2.

Поставки [П№,Д№] DIVIDEDBY (Поставки WHERE Имя_П=’П2’) [Д№]

. Получить имена поставщиков, которые не поставляют деталь Д2.

((Поставщики [П№] MINUS (Поставки WHERE Д№=’Д2’) [П№])

JOIN (Поставщики) [Имя_П]

Покажем, в качестве примера, как выглядит запись команды на выполнение последнего запроса, сделанная на языке SQL:

SELECT DISTINCT Поставщики.[Имя_П] FROM Поставщики

WHERE Поставщики.[П.№] NOT IN

(SELECT Поставки.[П№] FROM Поставки

WHERE Поставки.[Д№]=’Д2’);

Глава 2. Основы SQL

Познакомимся с синтаксисом и конструкцией языка структурированных запросов SQL (Structured Query Language). Это позволит лучше понимать процесс обработки данных и создавать эффективные запросы.- наиболее распространенный язык управления базами данных архитектуры клиент-сервер. Стандарт современной версии ANSI SQL был принят в 1992 году. Эта версия дает возможность использовать общий набор операторов в любой SQL-совместимой программе управления базами данных. Так, MS ACCESS использует версию Microsoft Jet SQL. СУБД SQL Server 7.0 использует расширенную версию SQL - Transact-SQL. Разработчики SQL-совместимых программ управления базами данных имеют право свободно расширять этот язык, если поддерживается стандартный набор основных команд, описанный в ANSI SQL-92. Мы будем уделять большее внимание версии Jet SQL.

Стандарт ANSI SQL-92 содержит около 200 ключевых слов, а в Jet SQL используется менее половины из них. Кроме того, в Jet SQL зарезервирован набор слов, не имеющих аналогов в ANSI SQL-92.

Все ключевые слова ANSI SQL, поддерживаемые используемой модификацией Jet SQL, а также зарезервированные уникальные слова, можно найти в справочных пособиях (в том числе и в системе помощи MS Access).

Возможности современных реляционных баз данных позволяют осуществлять эффективное управление данными, используя одновременно два языка - язык реляционных баз данных SQL и язык программирования VBA (Visual Basic for Applications), разработанный для программных продуктов пакета MS Office.

Команда SQL - это последовательность заданных операторами действий, выполненных в определенном порядке.

Синтаксис языка включает слова и символы, которые можно применять, а также правила, по которым эти слова и символы можно использовать при создании команд и программ. Структура команды SQL показана на следующем примере (мы продолжаем использовать базу данных Проекты-Поставщики-Детали, смоделированную в прошлых главах): Найти поставщиков из Минска.


Предложение - это фрагмент команды SQL, который начинается с ключевого слова, является обязательным или необязательным и должен быть записан в определенном порядке.

Ключевые слова - операторы, условия, модификаторы, итоговые функции - имеют в SQL определенное значение и применение, которое строго регламентировано.

Имена или идентификаторы - это слова, которые применяют для именования объектов базы данных, в том числе таблиц, столбцов, псевдонимов и представлений. Они не могут совпадать с ключевым словом и их длина ограничена 128 символами.

Синтаксис SQL предусматривает использование знаков пунктуации:

·        запятые используются для разделения компонентов списка параметров;

·        точки используются для отделения имен таблиц от имен полей;

·        точка с запятой ставится в конце инструкции Jet SQL;

·        квадратные скобки используются для выделения имен полей только тогда, когда в именах используются пробелы или другие знаки пунктуации, не разрешенные в SQL;

·        одинарная (предпочтительней) или двойная кавычка применяется для описания строчных переменных;

·        символы * и ? используются для маскирования окончания или одного символа соответственно;

·        символ # применяется для представления одной цифры в операторе LIKE.

Необходимо помнить, что в разных версиях SQL могут быть некоторые различия в использовании знаков пунктуации.

Семантика позволяет выяснить реальное значение, смысл любой синтаксически правильной команды (можно написать синтаксически правильную команду, которая будет выражать неправильный смысл).- непроцедурный, или декларативный язык. В нем нужно описывать то, что именно вы хотите сделать, а не то, как вы собираетесь это делать (в отличие от процедурных языков С, Perl, Pascal…). Оптимизатор, который входит в состав программного обеспечения СУБД, самостоятельно рассчитывает как это делать.

Язык SQL может быть встроенным (когда команды SQL как элементы включаются в какие-нибудь программы, написанные на процедурных языках общего назначения C, Java, Pascal… или языках сценариев Perl, PHP, Python…) и/или интерактивным.

2.1 Типы данных

Категории типов данных:

·        Character string - Строки символов;

·        Bit string - Строки битов;

·        Exact numeric - Рациональные (целые и действительные) числа с плавающей десятичной точкой;

·        Approximate numeric - Вещественные числа (с плавающей точкой);

·        Date time - значения даты и времени;

·        Interval - интервалы даты и времени.

         Строковые типы данных

Character (n) - строка фиксированной длины n. Максимальная длина строки определяется конкретной СУБД. В Access - 256 символов. Если символов меньше чем n, то добавляются пробелы. Синонимы - Char(n).

Character varying (n) - строка переменной длины, длинной менее n. Максимальное n зависит от СУБД. Синонимы: Char varying, Charvar.

National Character (National Char, NChar) - совпадает с типом Char, только хранит лишь стандартизованные многобайтовые или двухбайтовые знаки (Unicode). Записывается: N'a*b'. National Character Varying - то же для строк переменной длины.

Unicode - единое множество чисел (16-разрядных), которое представляет знаки почти всех мировых языков. Содержит 65536 = 216 знаков.

В СУБД Access к строковым типам данных относятся: text и memo.

         Битовые типы данных

BIT (n) - строка фиксированной длины (фиксированные числа битов). Max длина определяется СУБД. Если длина строки меньше n, то получите сообщение об ошибке. В стоке BIT перед первой кавычкой должна стаять латинская В, например, В'01001' - это строка типа BIT(5). Bit varying - аналогично, как Charvar.

Bit - тип данных используется для хранения так называемых больших бинарных объектов (Binary Large Object - BLOB) - например, звук, изображение.

В СУБД Access к bit типу данных относятся: yes, no, binary, OLE object.

         Точные числовые типы данных

Представляют точные числовые значения, могут быть положительными, отрицательными и нулем, целыми или рациональными (конечная десятичная дробь).

Имеет фиксированные точность и масштаб:

·        точность - число значащих цифр в записи числа (т.е. общее количество цифр в десятичной записи без учета десятичной точки);

·        масштаб - число цифр справа от десятичной точки (масштаб ≤ точности).

Типы:

Numeric (точность [,масштаб]) - представляет произвольное рациональное число.

Decimal - аналогичен NUMERIC, но только задает нижнюю границу точности, т. е. СУБД может выбрать большую точность, чем заказано пользователем.

Integer (или INT) - представляет произвольное целое число.

SMALLINT - повторяет INT, только интервал допустимых значений уже.

В СУБД Access: Decimal, Integer, byte, long integer.

Пример: Хранение числа 123,55:

Спецификация столбца

Хранится значение

Numeric (5)

124

Numeric (5.0)

124

Numeric (5.1)

123,6

Numeric (5.2)

123,55

Numeric (4.0)

124

Numeric (4.1)

123,6

Numeric (4.2)

Выходит за пределы точности


         Вещественные числовые типы данных

Вещественные или числа с плавающей точкой применяются для хранения приближенных числовых значений.

FLOAT (точность) - представляет произвольное рациональное приближение действительного числа с плавающей точкой. Значение точности представляется не в количестве значащих десятичных цифр, а в количестве битов. Точность не должна быть меньше 1. Максимальная точность зависит от СУБД. Для преобразования десятеричной точности в бинарную надо умножить десятеричную точность на 3.32193. Например, 7 знаков точности дают 24 бита.

REAL - совпадает с FLOAT, но точность вводить не надо, ее автоматически определяет СУБД. Числа типа REAL называют числами одинарной точности с плавающей точкой.

DOUBLE PRECISION - вдвое превышает точность REAL - числа двойной точности с плавающей точкой.

В СУБД Access - single, double.

         Календарные типы данных

Используется для отображения даты и времени суток.

·        DATE - имеет формат YYYY-MM-DD.

·        TIME - имеет формат HH:MM:SS. Можно добавить аргумент “точность” для долей секунд.

·        TIMESTAMP - имеет формат YYYY-MM-DD_ HH:MM:SS.

·        B СУБД ACCESS: date/time.

·        Интервальные типы данных обозначают расстояние между датами или двумя отметками времени суток. Access не поддерживает.

         Значения NULL

Отображает отсутствующие или неизвестные данные.

·        В SQL ключевое слово NULL определяет значение Null.

·        Это не 0, не пустая строка (′ ′) и не строка пробелов. NULL не принадлежит ни к какому типу данных и его можно записать в любой столбец, кроме тех, для которых задано ограничение NOT NULL.

Источник: https://www.bibliofond.ru/view.aspx?id=869454