Языки запросов традиционных СУБД.
Операции реляционной алгебры, помимо традиционных операций, аналогичных операциям в теории множеств (объединения, пересечения, разности, дополнения, декартова произведения, деления), включают операции проекции (вертикальной вырезки из таблицы), селекции (горизонтальная вырезка по некоторым условиям), соединения, естественного соединения. В операциях РА операндами являются целиком таблицы, результатом является таблица.
В явном виде операции реляционной представлены на уровне интерфейса сделаны в Paradox. В Paradox реализован отличный от SQL язык запросов QBE (англ. Query By Example — запрос по образцу) Для того, чтобы выполнить операцию соединения, выбираются таблицы, их образцы в виде незаполненных шаблонов представляются на экране и пользователю для соединения достаточно указать один и тот же идентификатор в соединяемых полях. В Paradox операции пересечения так и задаются: пересечь таблицу A с таблицей B.
Операции реляционного исчисления обычно реализуются на некотором подмножестве языка исчисления предикатов первого порядка и, в отличие от операций реляционной алгебры, где явно задается выполняемая операция и указываются операнды, здесь явно задается не операция, а описывается множество кортежей и условия, которым они должны удовлетворять в виде логических утверждений.
2) Стандартным языком наиболее распространенных в настоящее время реляционных СУБД является язык SQL (Structured Query Language). Язык SQL сочетает средства SDL и DML, т.е. позволяет определять схему реляционной БД и манипулировать данными.
|
|
В SQL определены два подмножества языка:
а)SQL-DDL (Data Definition Language) - язык определения структур и ограничений целостности баз данных. Сюда относятся команды создания и удаления баз данных; создания, изменения и удаления таблиц и т.д.
б) SQL-DML (Data Manipulation Language) - язык манипулиро-вания данными: добавление, изменение, удаление и извлечение данных, управление транзакциями.
При этом именование объектов БД (для реляционной БД - именование таблиц и их столбцов) поддерживается на языковом уровне в том смысле, что компилятор языка SQL производит преобразование имен объектов в их внутренние идентификаторы на основании специально поддерживаемых служебных таблиц-каталогов. Внутренняя часть СУБД (ядро) вообще не работает с именами таблиц и их столбцов. Язык SQL содержит специальные средства определения ограничений целостности БД. Опять же, ограничения целостности хранятся в специальных таблицах-каталогах, и обеспечение контроля целостности БД производится на языковом уровне, т.е. при компиляции операторов модификации БД компилятор SQL на основании имеющихся в БД ограничений целостности генерирует соответствующий программный код. Специальные операторы языка SQL позволяют определять так называемые представления БД, фактически являющиеся хранимыми в БД запросами (результатом любого запроса к реляционной БД является таблица) с именованными столбцами. Для пользователя представление является такой же таблицей, как любая базовая таблица, хранимая в БД, но с помощью представлений можно ограничить или наоборот расширить видимость БД для конкретного пользователя. Поддержание представлений производится также на языковом уровне. Наконец, авторизация доступа к объектам БД производится также на основе специального набора операторов SQL. Идея состоит в том, что для выполнения операторов SQL разного вида пользователь должен обладать различными полномочиями. Пользователь, создавший таблицу БД, обладает полным набором полномочий для работы с этой таблицей. В число этих полномочий входит полномочие на передачу всех или части полномочий другим пользователям, включая полномочие на передачу полномочий. Полномочия пользователей описываются в специальных таблицах-каталогах, контроль полномочий поддерживается на языковом уровне.
|
|
А) CREATE TABLE
|
|
Синтаксис оператора создания таблицы имеет следующий вид:
CREATE TABLE <имя__таблицы>
(<имя_столбца> <тип_столбца>
[NOT NULL]
[UNIQUE | PRIMARY KEY]
[REFERENCES <имя_мастер_таблицы> [<имя_столбца>]], ...)
Пользователь обязан указать имя таблицы и список столбцов. Для каждого столбца обязательно указываются его имя и тип, а также опционально могут быть указаны следующие параметры:
- NOT NULL - в этом случае элементы столбца всегда должны иметь определенное значение (не NULL);
- один из взаимоисключающих параметров UNIQUE (значение каждого элемента столбца должно быть уникальным) или PRIMARY KEY (столбец является первичным ключом). Заметим, что в популярной реляционной СУБД Visual FoxPro параметр UNIQUE используется в ином смысле; вместо него используется параметр CANDIDATE;
- REFERNECES <имя_мастер_таблицы> [<имя_столбца>] - эта конструкция определяет, что данный столбец является внешним ключом и указывает на соответствующий ключ <мастер_таблицы>.
B) Оператор создания индексов
CREATE [UNIQUE] INDEX <имя_индекса> ON <имя_таблицы> (<имя_столбца>,...)
Эта команда создает индекс с заданным именем для таблицы <имя_таблицы> по столбцам, входящим в список, указанный в скобках. Создание индексов значительно ускоряет работу с таблицами. В случае указания необязательного параметра UNIQUE СУБД будет проверять каждое значение индекса на уникальность (см. выше по тексту замечание относительно UNIQUE при описании команды CREATE TABLE).
|
|
C) Построение запросов
Для извлечения записей из таблиц в SQL определен оператор SELECT.
SELECT [ALL | DISTINCT] <список_выбора>
FROM <имя_таблицы>, ...
[ WHERE <условие> ]
[ GROUP BY <имя_столбца>,... ]
[ HAVING <условие> ]
[ORDER BY <имя_столбца> [ASC | DESC] , ... ]
Структура типичного запроса выглядит следующим образом:
- описание полей данных в результате;
- список источников данных;
- условия связи между различными источниками данных;
- условия выборки данных;
- условия группирования данных;
- задание порядка записей в результате.
Некоторые задачи нельзя решить с использованием только операторов сравнения. Для решения этой задачи предназначено ключевое слово LIKE. Фраза WHERE в этом случае имеет следующий вид:
WHERE <имя_столбца> LIKE <образец> [ESCAPE <ключевой_символ>]
Обычно в шаблонах используются два символа: «%» (знак процента) - заменяет любое количество символов; «_» (подчеркивание) - заменяет одиночный символ.
EXISTS просто устанавливает факт существования записи в наборе данных, соответствующем внутреннему запросу (поэтому EXISTS зачастую называют предикатом)
SELECT *
FROM auto А WHERE NOT EXISTS
(SELECT * FROM moto В WHERE A.client_id = B. client_id)
INTO DBF tempi ORDER BY A.client_fio
В случае, когда не требуется возвращения подзапросом значений сразу нескольких полей, более эффективно приведенный выше подзапрос выполняется с использованием оператора IN, так как он не требует повторного выполнения внутреннего запроса для каждой строки внешнего.
SELECT *
FROM auto
WHERE client_id NOT IN
(SELECT client_id FROM moto)
INTO DBF tempi
ORDER BY client_fio
При выполнении соединения двух и более таблиц допускаются различные варианты объединения данных из разных таблиц в результирующее отношение. Различают внутреннее и внешнее соединения. По умолчанию устанавливается внутреннее соеди-нение (INNER JOIN). Внешние соединения бывают правыми
(RIGHT OUTER JOIN) и левыми (LEFT OUTER JOIN). Имеет место также полное соединение (FULL OUTER JOIN) данных.
Группировка данных в операторе SELECT задается предложениями GROUP BY и HAVING. GROUP BY разделяет данные в таблице на группы, фраза HAVING задает условия, которые накладываются на группы данных.
Для сортировки данных, получаемых при помощи оператора SELECT, служит ключевое слово ORDER BY.
В SQL предусмотрена возможность выполнения операции реляционной алгебры «ОБЪЕДИНЕНИЕ» (UNION) над отношениями, являющимися результатами выполнения оператора SELECT. Естественно, эти отношения должны иметь одинако-вую структуру, так как операция объединения реляционных от-ношений аналогична операции объединения множеств в теории множеств.
Дата добавления: 2018-05-13; просмотров: 796; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!