Язык SQL - общие сведения




Язык, основанный на реляционной алгебре

реляционный алгебра пользователь база

Язык данных, основанный на реляционной алгебре, был предложен Коддом. Это теоретический язык, позволяющий манипулировать данными в реляционных БД. Этот язык в полном объеме пока не реализован в СУБД. Однако большая часть операций языка так или иначе реализована в современных коммерческих СУБД.

Язык содержит девять операторов. Это операторы для выполнения операций теории множеств над отношениями: объединение, пересечение, произведение, разность отношений, а также операторы для выполнения операций, применимых только к отношениям. К числу последних относятся операция сцепления отношения с множеством (ее еще называют выборкой), операция сцепление двух отношений (или соединение) и операция проекции отношения на его компоненту. При рассмотрении предыдущего параграфа мы могли убедиться в том, что трех последних операций оказывается достаточно для составления разнообразных запросов к БД, связанных с поиском нужных сведений.

Рассмотрим операторы языка, предложенного Коддом.

UNION - объединение. Выполняет операцию объединения отношений.

INTERSECTION - пересечение. Выполняет операцию пересечения отношений.

DIFFERENCE (MINUS) - вычитание. Выполняет операцию вычитания отношений.- выборка. Выполняет операцию сцепления отношения с множеством.- соединить. Выполняет операцию сцепления двух отношений.- спроектировать. Выполняет операцию проекции отношения на его компоненты.

INSERT - включить. Выполняет операцию добавления кортежей в отношение.

DELETE - удалить. Выполняет операцию удаления кортежей из отношения.

UPDATE - обновить. Выполняет операцию изменения значений атрибутов отношения.

При составлении запросов используются, в основном, три операции: SELECT, JOIN и PROJECT.

Конструкция предложения SELECT такова:

SELECT <имя таблицы> WHERE <условие> GIVING TEMP (выбрать, где, сформировать таблицу, содержащую результат).

Конструкция предложения JOIN:

JOIN <имя таблицы> AND <имя таблицы> OVER <имя атрибута, по которому выполняется сцепление> GIVING TEMP (соединить, и, по, сформировать таблицу, содержащую результат).

Конструкция предложения PROJECT: PROJECT <имя таблицы> OVER <имена атрибутов> GIVING TEMP (спроектировать, на, сформировать таблицу, содержащую результат).

Предложения языка записываются в том порядке, в котором должны выполняться операции запроса. Сформированная каждым из предложений таблица (TEMP) является исходной для выполнения следующего предложения. Таблица, сформированная последним предложением запроса, содержит окончательный результат выполнения запроса (RESULT).

Составленные ранее запросы запишем с помощью этих операторов. Предложения запросов следуют в том же порядке, в котором следуют операции в записанных ранее формулах запросов.

Запрос 1 Сообщить название фирмы-поставщика П1

SELECT ПОСТАВЩИК WHERE П# = 'П1' GIVING TEMP1

PROJECT TEMP1 OVER Имя поставщика GIVING RESULT


 

Первое предложение формирует промежуточную таблицу TEMP1, второе предложение формирует результирующую таблицу RESULT. Результаты выполнения каждого предложения в точности соответствуют результатам выполнения операций, рассмотренным в предыдущем параграфе.

Запрос 2

В каком количестве поставляются изделия И2?

SELECT ПОСТАВКИ WHERE И# = 'И2' GIVING TEMP1

PROJECT TEMP1 OVER Кол GIVING RESULT

Запрос 3

Сколько изделий И2 поставляет фирма Заря?

ПОСТАВЩИК WHERE Имя поставщика = 'Заря' GIVING TEMP1

JOIN TEMP1 AND ПОСТАВКИ OVER П# GIVING TEMP2

SELECT TEMP2 WHERE И# = 'И2' GIVING TEMP3

PROJECT TEMP3 OVER Кол GIVING RESULT

Запрос 4

Какие поставщики и по какому тарифу поставляют изделия И2?

SELECT ПОСТАВКИ И# = 'И2' GIVING TEMP1

JOIN TEMP1 AND ПОСТАВЩИК OVER П# GIVING TEMP2

JOIN TEMP2 AND ДОСТАВКА OVER Город GIVING TEMP3

PROJECT TEMP3 OVER Имя поставщика, Тариф GIVING RESULT

 

В языках данных СУБД команды GIVING TEMP и GIVING RESULT не используются. Конец формулы запроса обозначается точкой или точкой с запятой. Кроме того, в современных СУБД принят несколько иной синтаксис формул запросов.

Рассмотрим примеры записи запросов на выполнение операций ведения БД.

Запрос 5

Добавить в отношение ПОСТАВЩИК кортеж {П4, Победа, Пенза}

 

ПОСТАВЩИК UNION {П4, Победа, Пенза} GIVING ПОСТАВЩИК

Запрос 6

Удалить из отношения сведения о поставках изделия И2.

 

ПОСТАВКИ MINUS {*, И2, *}

 

Удалить кортежи отношения можно также с помощью оператора DELETE.

DELETE ПОСТАВКИ WHERE И#=И2

 

Рассмотренный язык (язык SQL) обладает следующей особенностью: это процедурный язык обработки реляционных таблиц. Это означает, что в формуле запроса последовательно перечисляются все операции, которые надо выполнить над отношениями для выработки ответа. Пользователь, работающий с таким языком, должен иметь определенный уровень подготовки. Кроме того, один и тот же результат можно получить, составляя разные варианты запроса. При этом скорость выполнения запроса и необходимые объемы памяти для хранения промежуточных результатов зависят от того, как именно составлена формула: "лучшим" или "не лучшим" способом. И здесь существенное значение имеет уровень подготовки пользователя, его опыт и навыки. Кроме того, в языке слабо представлены средства арифметической обработки данных. Предусмотрен лишь оператор суммирования данных по столбцам SUMMARIZE.

Замечательным достоинством этого языка является его реляционная полнота. Это означает, что язык позволяет составить любые запросы на манипулирование данными в БД.

Желание освободиться от процедурности языка, которую принято считать его недостатком, привело к созданию непроцедурных коммерческих языков реляционных БД, использующих несколько иной принцип составления запросов. Непроцедурные языки (язык QBE ) позволяют в запросе сформулировать, что нужно получить, а не как этого добиться.

Тремя наиболее важными реляционными языками БД являются: SQL - Structured Query Language (структурированный язык запросов), QBE - Query By Example (запрос по образцу) и QUEL - Query Language (язык запросов). Наибольшее распространение получили первые два.

 

Язык SQL - общие сведения

 

Язык SQL предназначен для выполнения операций над таблицами (создание, удаление, изменение структуры таблиц), и над данными (выборка, изменение, добавление, удаление данных). Он позволяет выполнять и некоторые дополнительные операции. Язык не содержит операторов управления и ввода-вывода, операторов организации подпрограмм и т.п. Поэтому язык SQL автономно не используется, он может работать только в среде конкретной СУБД.был создан и впервые использован в 1981 г. С тех пор появились различные версии языка, однако основные принципы составления запросов, основные операторы и правила их выполнения практически одинаковы для всех СУБД. В настоящее время принят международный стандарт SQL - SQL-92. Этот стандарт представляет собой обобщение всех известных его реализаций. Это означает, что ядро стандарта содержит операции, применяемые практически во всех известных коммерческих версиях языка, а полный стандарт включает усовершенствования, которые некоторым производителям еще только предстоит реализовать.

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

 

Язык запросов QBE

 

Язык SQL требует определенных навыков в составлении запросов и не может быть предложен пользователю- непрограммисту для общения с БД. Был разработан простой и наглядный графически-ориентированный язык запросов для пользователей - Q uery B y E xample (запрос по образцу), ставший важной частью коммерческих СУБД. Этот язык также основан на реляционной алгебре.

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

Рассмотрим основные возможности QBE, опираясь на первоначально разработанный вариант языка.

Пользователю предоставляются сведения об именах таблиц и именах столбцов, содержащихся в каждой из таблиц. Пользователь может вывести таблицу-образец для любой таблицы БД, указав ее имя. В первом столбце таблицы-образца выводится имя таблицы, за ним следуют имена столбцов. Под каждым именем столбца оставлено пустое пространство, позволяющее пользователю формировать запрос. Проиллюстрируем использование таблиц-образцов на примерах, составив на QBE два из ранее рассмотренных запросов.

Запрос 1

Сообщить название фирмы-поставщика П1.

Поскольку известные и искомые данные хранятся в одной таблице ПОСТАВЩИК, нужно вывести образец для этой таблицы.

 

ПОСТАВЩИК П# Имя поставщика Город
  П1 Р.  

 

Условием отбора является равенство значения, находящегося в столбце П# базовой таблицы, введенному значению П1.

В столбец П# помещаем условие отбора данных - номер поставщика П1. Для того, чтобы указать, что именно мы хотим вывести, в столбец Имя поставщика помещаем команду Р. (print - распечатать). Пустые столбцы можно удалить. Результат запроса будет представлен в виде так называемой ответной или целевой таблицы, содержащей все строки из базовой таблицы, в которых номер поставщика равен П1.

 

ПОСТАВЩИК П# Имя поставщика
  П1 Восход

 

Запрос 2

Сколько изделий И2 поставляет фирма Заря?

Для ответа на этот запрос необходимо использовать данные из двух таблиц. Для того чтобы указать системе, по каким столбцам устанавливается связь между таблицами, в соответствующих столбцах таблиц-образцов надо напечатать так называемый элемент-пример. В качестве элемента-примера можно использовать любую последовательность символов, выделив их символом подчеркивания. Важно, чтобы в обеих таблицах был указан один и тот же элемент-пример. Этим мы обеспечим выполнение операции сцепления (соединения) этих таблиц.

 

ПОСТАВЩИК П# Имя поставщика Город
  Заря  

 

ПОСТАВКИ П# И# Кол
  __П И2 Р.

 

Ответная таблица будет содержать все необходимые данные, пустые столбцы не выводятся.

 

Имя поставщика И# Кол
Заря И2  

 

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

Запрос 3 Какие изделия поставляются в количестве 200 или 300 единиц?

ПОСТАВКИ П# И# Кол
    Р. 200 300

 


 

Ответ:

 

И# Кол
И1 И2 И3 И1 300 200 200 200

 

Запрос 4

Какие изделия поставляются поставщиком П2 в количестве 500 единиц.

Ответ:

 

ПОСТАВКИ П# И# Кол   П# И# Кол
  П2 Р.     П2 И2  

 

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

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-04-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: