Материал: Базы данных. учебное пособие. Бокарев Д.И

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

где исходное отношение задается именем отношения либо заключенным в круглые скобки выражением реляционной алгебры, <список атрибутов> представляет собой разделенные запятыми имена атрибутов исходного отношения А1, А2,..., АN, <выражение> – это скалярное выражение, аналогичное выражению операции EXTEND, а <новый атрибут> – имя формируемого атрибута. В списке атрибутов и в выражении не должно использоваться имя нового атрибута.

Результатом операции SUMMARIZE является отношение R с заголовком, состоящим из атрибутов списка, расширенного новым атрибутом. Для получения тела отношения R сначала выполняется проецирование (назовем проекцию R1) исходного отношения на атрибуты А1, А2,..., АN , после чего каждый кортеж проекции расширяется новым (N+1)-м атрибутом. Поскольку проецирование, как правило, приводит к сокращению количества кортежей по отношению к исходному отношению (удаляются одинаковые кортежи), то можно считать, что происходит своеобразное группирование кортежей исходного отношения: одному кортежу отношения R1 соответствует один или более (если было дублирование при проецировании) кортежей исходного отношения. Значение (N+1)-го атрибута каждого кортежа отношения R формируется путем вычисления выражения над соответствующей этому кортежу группой кортежей исходного отношения.

Оператор множественного подведения итогов, подобно соответствующим операциям переименования и расширения, выполняет одновременно несколько "вертикальных" вычислений и записывает результаты в отдельные новые атрибуты.

Оператор реляционного присвоения можно представить следующим образом:

<выражение-цель>:= <выражение-источник>,

где оба выражения представляют совместимые по структуре отношения. Вычисленное значение <выражение-источник> присваивается отношению <выражение-цель>, заменяя его предыдущее значение.

Операция присвоения позволяет обновлять базу данных. С помощью операции присвоения можно не только полностью заменить все значения отношения <выражение-цель>, но и добавить или удалить кортежи.

Оператор вставки имеет следующий вид:

INSERT <выражение-источник> INTO <выражение-цель>,

где оба выражения представляют совместимые по структуре отношения. Выполнение операции заключается в вычислении значения отношения <выражение-источник> и вставке полученных кортежей в отношение, заданное <выражение-цель>.

Оператор обновления имеет следующий вид:

UPDATE <выражение-цель> <список элементов>,

где <список элементов> представляет собой последовательность разделенных запятыми операций присвоения <атрибут>:= <скалярное выражение>. Результатом выполнения операции обновления является отношение, полученное после присвоения соответствующих значений атрибутам отношения, заданного целевым выражением

Оператор удаления имеет следующий вид:

DELETE <выражение-цель>,

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

Операция реляционного сравнения может использоваться для прямого сравнения двух отношений. Она имеет следующий синтаксис:

<выражение1> <выражение2>,

где выражения представляют совместимые по структуре отношения, а знак – это один из следующих операторов сравнения: = (равно),  (не равно),  (подмножество), < (собственное подмножество),  (надмножество), > (собственное надмножество).

В реализациях конкретных реляционных СУБД реляционная алгебра и реляционное исчисление в "чистом" виде не используются.

6. Языки баз данных

Задание модели данных в БД осуществляется на специальном языке описания данных (ЯОД). Совокупность операторов обращения в СУБД из прикладной программы составляет язык манипулирования данными (ЯМД). Основные операции с данными, выполняемые средствами ЯМД: поиск информации, включение в БД новых записей, удаление записей, изменение значений элементов данных в записях.

6.1. Язык sql

Фактическим стандартом доступа к реляционным данным стал язык 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. Для разных столбцов можно задавать различный порядок сортировки.

Инструкция удаления индекса имеет формат вида: