Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Языки запросов традиционных СУБД.




Операции реляционной алгебры, помимо традиционных операций, аналогичных операциям в теории множеств (объединения, пересечения, разности, дополнения, декартова произведения, деления), включают операции проекции (вертикальной вырезки из таблицы), селекции (горизонтальная вырезка по некоторым условиям), соединения, естественного соединения. В операциях РА операндами являются целиком таблицы, результатом является таблица.

В явном виде операции реляционной представлены на уровне интерфейса сделаны в 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-29; просмотров: 211.

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