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.