где исходное отношение задается именем отношения либо заключенным в круглые скобки выражением реляционной алгебры, <список атрибутов> представляет собой разделенные запятыми имена атрибутов исходного отношения А1, А2,..., АN, <выражение> – это скалярное выражение, аналогичное выражению операции EXTEND, а <новый атрибут> – имя формируемого атрибута. В списке атрибутов и в выражении не должно использоваться имя нового атрибута.
Результатом операции SUMMARIZE является отношение R с заголовком, состоящим из атрибутов списка, расширенного новым атрибутом. Для получения тела отношения R сначала выполняется проецирование (назовем проекцию R1) исходного отношения на атрибуты А1, А2,..., АN , после чего каждый кортеж проекции расширяется новым (N+1)-м атрибутом. Поскольку проецирование, как правило, приводит к сокращению количества кортежей по отношению к исходному отношению (удаляются одинаковые кортежи), то можно считать, что происходит своеобразное группирование кортежей исходного отношения: одному кортежу отношения R1 соответствует один или более (если было дублирование при проецировании) кортежей исходного отношения. Значение (N+1)-го атрибута каждого кортежа отношения R формируется путем вычисления выражения над соответствующей этому кортежу группой кортежей исходного отношения.
Оператор множественного подведения итогов, подобно соответствующим операциям переименования и расширения, выполняет одновременно несколько "вертикальных" вычислений и записывает результаты в отдельные новые атрибуты.
Оператор реляционного присвоения можно представить следующим образом:
<выражение-цель>:= <выражение-источник>,
где оба выражения представляют совместимые по структуре отношения. Вычисленное значение <выражение-источник> присваивается отношению <выражение-цель>, заменяя его предыдущее значение.
Операция присвоения позволяет обновлять базу данных. С помощью операции присвоения можно не только полностью заменить все значения отношения <выражение-цель>, но и добавить или удалить кортежи.
Оператор вставки имеет следующий вид:
INSERT <выражение-источник> INTO <выражение-цель>,
где оба выражения представляют совместимые по структуре отношения. Выполнение операции заключается в вычислении значения отношения <выражение-источник> и вставке полученных кортежей в отношение, заданное <выражение-цель>.
Оператор обновления имеет следующий вид:
UPDATE <выражение-цель> <список элементов>,
где <список элементов> представляет собой последовательность разделенных запятыми операций присвоения <атрибут>:= <скалярное выражение>. Результатом выполнения операции обновления является отношение, полученное после присвоения соответствующих значений атрибутам отношения, заданного целевым выражением
Оператор удаления имеет следующий вид:
DELETE <выражение-цель>,
где <выражение-цель> представляет собой реляционное выражение. Все кортежи в результирующем отношении удаляются.
Операция реляционного сравнения может использоваться для прямого сравнения двух отношений. Она имеет следующий синтаксис:
<выражение1> <выражение2>,
где выражения представляют совместимые по структуре отношения, а знак – это один из следующих операторов сравнения: = (равно), (не равно), (подмножество), < (собственное подмножество), (надмножество), > (собственное надмножество).
В реализациях конкретных реляционных СУБД реляционная алгебра и реляционное исчисление в "чистом" виде не используются.
Задание модели данных в БД осуществляется на специальном языке описания данных (ЯОД). Совокупность операторов обращения в СУБД из прикладной программы составляет язык манипулирования данными (ЯМД). Основные операции с данными, выполняемые средствами ЯМД: поиск информации, включение в БД новых записей, удаление записей, изменение значений элементов данных в записях.
Фактическим стандартом доступа к реляционным данным стал язык SQL (Structured Query Language – структурированный язык запросов), представляющий собой смесь операторов реляционной алгебры и выражений реляционного исчисления, использующий синтаксис, близкий к фразам английского языка и расширенный дополнительными возможностями, отсутствующими в реляционной алгебре и реляционном исчислении. Он не содержит условных операторов, операторов цикла, организации подпрограмм, ввода-вывода и т.п. В связи с этим SQL автономно не используется. Инструкции SQL встраиваются в программу, написанную на традиционном языке программирования и дают возможность получить доступ к базам данных (встроенный SQL). Кроме того, из таких языков, С, C++, JAVA инструкции SQL можно посылать СУБД в явном виде, используя интерфейс вызовов функций.
Язык SQL является многофункциональным языком. Во-первых, SQL используется в качестве языка интерактивных запросов пользователей с целью выборки данных и в качестве встроенного языка программирования баз данных. Кроме того, SQL используется в качестве языка администрирования БД для определения структуры базы данных и управления доступом к данным, находящимся на сервере; в качестве языка создания приложений клиент/сервер, доступа к данным в среде Internet, распределенных баз данных.
С помощью SQL можно динамически изменять и расширять структуру базы данных даже в то время, когда пользователи работают с ее содержимым. Таким образом, SQL обеспечивает максимальную гибкость. Статические языки определения данных запрещают доступ к БД во время изменения ее структуры.
SQL работает только с реляционными базами данных и предоставляет пользователю следующие функциональные возможности:
- изменение структуры представления данных;
- выборка данных из базы данных;
- обработка базы данных, т.е. добавление новых данных, изменение, удаление имеющихся данных;
- управление доступом к базе данных;
- совместное использование базы данных пользователями, работающими параллельно;
- обеспечение целостности базы данных.
Официальный стандарт языка SQL был опубликован ANSI и ISO в 1986 г. В настоящее время действует стандарт, принятый в 2003 году (SQL:2003) с небольшими модификациями, внесёнными позже (SQL:2006, SQL:2008).
Основные задачи, решаемые средствами языка SQL – манипулирование различными объектами базы данных (таблицами, индексами, представлениями и т.д.) и манипулирование данными, хранящимися в таблицах базы данных. В связи с этим, язык SQL принято делить на две части: язык определения данных DDL и язык манипулирования данными DML. Основные инструкции языка SQL представлены в табл. 1.
При описании синтаксиса инструкций используют следующие правила:
- каждая инструкция начинается с команды – ключевого слова, описывающего действие, выполняемое инструкцией (например, CREATE – создать, DELETE – удалить и т.д.);
- после команды следует одно или несколько предложений, описывающих данные, с которыми работает инструкция, или содержащих дополнительную информацию о действии, выполняемом инструкцией. Каждое предложение начинается с ключевого слова, например, WHERE (где), FROM (откуда), INTO (куда), HAVING (имеющий);
- в квадратные скобки "[…]" заключены необязательные элементы;
- вертикальная черта "|", разделяющая два элемента, указывает на то, что в инструкции используется либо один элемент, либо второй;
- в фигурные скобки "{…}"заключаются элементы, разделенные вертикальной чертой;
- троеточие означает, что далее в инструкции либо следует выражение, либо повторяются элементы, указанные перед тремя точками.
Таблица 1
Инструкции языка SQL
Вид |
Название |
Назначение |
DDL |
CREATE TABLE |
Добавление новой таблицы в БД |
DROP TABLE |
Удаление таблицы |
|
ALTER TABLE |
Изменение структуры таблицы |
|
CREATE INDEX |
Создание индекса для столбца |
|
DROP INDEX |
Удаление индекса столбца |
|
CREATE VIEW |
Создание нового представления |
|
DROP VIEW |
Удаление представления |
|
GRAND |
Назначение привилегий доступа пользователей к БД |
|
REVOKE |
Удаление привилегий |
|
CREATE SCHEMA |
Добавление новой схемы в БД |
|
DROP SCHEMA |
Удаление схемы |
|
DML |
SELECT |
Выборка данных из таблицы |
UPDATE |
Обновление данных в таблице |
|
INSERT |
Вставка новых строк в таблицу |
|
DELETE |
Удаление строк из таблицы |
Инструкция создания таблицы имеет формат вида:
CREATE TABLE <имя таблицы>
(<имя столбца> <тип данных> [NOT NULL]
[,<имя столбца> <тип данных> [NOT NULL]]... )
После выполнения инструкции появляется новая таблица, которой присваивается имя, указанное в инструкции. Имя таблицы (как и имена других объектов – столбцов и пользователей) согласно стандарту ANSI/ISO должны содержать от 1 до 18 символов, начинаться с буквы и не содержать пробелов или специальных символов пунктуации (на практике поддержка имен в различных СУБД реализована по-разному).
Обязательными операндами данной инструкции являются имя создаваемой таблицы и имя хотя бы одного столбца с указанием типа данных, хранимых в этом столбце. SQL поддерживает различные типы данных: целые числа, числа с плавающей запятой, строки символов, значения даты и времени и др. В общем случае в современных СУБД могут использоваться самые разнообразные дополнительные типы данных, расширяющие базовый набор SQL.
При создании таблицы для отдельных столбцов могут указываться некоторые дополнительные правила контроля вводимых в них значений. Конструкция – NOT NULL (не пустое) служит именно таким целям и для столбца таблицы означает, что в этом столбце должно быть непустое (определенное) значение. Тип данных INTEGER обозначает тип данных целое число, а DATE – тип данных, обозначающих значения даты и др.
В процессе работы у пользователей возникает необходимость добавить в таблицу информацию. Инструкция изменения структуры таблицы имеет формат вида:
ALTER TABLE <имя таблицы>
{ADD|ALTER|DROP} <имя столбца> [<тип данных>]
[NOT NULL]
[,{ADD|ALTER|DROP} <имя столбца> [<тип данных>]
[NOT NULL],..]
Изменение структуры таблицы может состоять в добавлении (ADD), изменении (ALTER) или удалении (DROP) одного или нескольких столбцов таблицы.
Инструкция удаления таблицы имеет формат вида:
DROP TABLE <имя таблицы>
Одним из структурных элементов физической памяти является индекс. Индекс – это средство, обеспечивающее быстрый доступ к строкам таблицы на основе значений одного или нескольких столбцов. В индексе хранятся значения данных и указатели на строки, где эти данные встречаются. Данные в индексе располагаются в убывающем или в возрастающем порядке, чтобы СУБД могла быстро найти требуемое значение. Затем по указателю СУБД сможет быстро определить строку, содержащую требуемое значение. Инструкция создания индекса имеет формат вида:
CREATE [UNIQUE] INDEX <имя индекса> ОN <имя таблицы> (<имя столбца> [ ASC| DESC]
[,<имя столбца> [ASC| DESC],... )
Оператор позволяет создать индекс для одного или нескольких столбцов заданной таблицы с целью ускорения выполнение запросных и поисковых операций с таблицей. Для одной таблицы можно создать несколько индексов.
Необязательная опция UNIQUE обеспечивает запрет задания совпадающих значений для индекса. По существу, создание индекса с указанием признака UNIQUE означает определение ключа в созданной ранее таблице.
При создании индекса можно задать порядок автоматической сортировки значений в столбцах – в порядке возрастания ASC (по умолчанию), или в порядке убывания DESC. Для разных столбцов можно задавать различный порядок сортировки.
Инструкция удаления индекса имеет формат вида: