Таким образом, одна из основных функций СУБД заключается в поддержке языка манипулирования данными, с помощью которого пользователь может создавать выражения для выполнения перечисленных выше операций с данными. Понятие манипулирования данными применимо как к внешнему и концептуальному уровням, так и к внутреннему уровню. Однако на внутреннем уровне для этого необходимо определить очень сложные процедуры низкого уровня, позволяющие выполнять доступ к данным весьма эффективно. На более высоких уровнях акцент переносится в сторону большей простоты использования и основные усилия направляются на обеспечение эффективного взаимодействия пользователя с системой.
Языки DML отличаются базовыми конструкциями извлечения данных. Следует различать два типа языков DML: процедурный и непроцедурный. Основное отличие между ними заключается в том, что процедурные языки указывают, как можно получить результат оператора языка DML, тогда как непроцедурные языки описывают, какой результат будет получен. Как правило, в процедурных языках записи рассматриваются по отдельности, тогда как непроцедурные языки оперируют с целыми наборами записей.
С помощью процедурного языка DML пользователь, а точнее - программист, указывает на то, какие данные ему необходимы и как их можно получить. Это значит, что пользователь должен определить все операции доступа к данным (осуществляемые посредством вызова соответствующих процедур), которые должны быть выполнены для получения требуемой информации. Обычно такой процедурный язык DML позволяет извлечь запись, обработать ее и, в зависимости от полученных результатов, извлечь другую запись, которая должна быть подвергнута аналогичной обработке, и т.д. Подобный процесс извлечения данных продолжается до тех пор, пока не будут извлечены все запрашиваемые данные. Языки DML сетевых и иерархических СУБД обычно являются процедурными
Непроцедурные языки DML позволяют определить весь набор требуемых данных с помощью одного оператора извлечения или обновления. С помощью непроцедурных языков DML пользователь указывает, какие данные ему нужны, без определения способа их получе-ния. СУБД транслирует выражение на языке DML в процедуру (или набор процедур), которая обеспечивает манипулирование затребованным набором записей. Данный подход освобождает пользователя от необходимости знать детали внутренней реализации структур данных и особенности алгоритмов, используемых для извлечения и возможного преобразования данных. Непроцедурные языки часто также называют декларативными языками. Реляционные СУБД в той или иной форме обычно включают поддержку непроцедурных языков манипулирования данными - чаще всего это бывает язык структурированных запросов SQL (Structured Query Language) или язык запросов по образцу QBE (Query-by-Example). Непроцедурные языки обычно проще понять и использовать, чем процедурные языки DML, поскольку пользователем выполняется меньшая часть работы, а СУБД - большая. Часть непроцедурного языка DML, которая отвечает за извлечение данных, называется языком запросов. Язык запросов можно определить как высокоуровневый узкоспециализированный язык, предназначенный для удовлетворения различных требований по выборке информации из базы данных. В этом смысле термин "запрос" зарезервирован для обозначения оператора извлечения данных, выраженного с помощью языка запросов.
Языки 4GL. Аббревиатура "4GL" представляет собой сокращенный английский вариант написания термина "язык четвертого поколения"(Fourth-Generation Language). He существует четкого определения этого понятия, хотя, по сути, речь идет о некотором стенографическом варианте языка программирования. Если для организации некоторой операции с данными на языке третьего поколения (3GL) типа COBOL потребуется написать сотни строк кода, то для реализации этой же операции на языке четвертого поколения будет достаточно нескольких строк.
В то время как языки третьего поколения являются процедурными, языки 4GL выступают как непроцедурные. Предполагается, что реализация языков четвертого поколения будет в значительной мере основана на использовании компонентов высокого уровня, которые часто называют "инструментами четвертого поколения". Пользователю не потребуется определять все этапы выполнения программы, необходимые для решения поставленной задачи, а достаточно будет лишь определить нужные параметры, на основании которых упомянутые выше инструменты автоматически осуществят генерацию прикладного приложения. Выделяют следующие типы языков четвертого поколения:
языки представления информации, например языки запросов или генераторы отчетов;
специализированные языки, например языки электронных таблиц и баз данных;
генераторы приложений, которые при создании приложений обеспечивают определение, вставку, обновление или извлечение сведений из базы данных;
языки очень высокого уровня, предназначенные для генерации кода приложений.
В качестве примеров языков четвертого поколения можно указать упоминавшиеся выше языки SQL и QBE.
Язык SQL
SQL (обычно произносимый как "СИКВЭЛ" или "ЭСКЮЭЛЬ") символизирует собой Структурированный Язык Запросов. Это - язык, который дает Вам возможность создавать и работать в реляционных базах данных, являющихся наборами связанной информации, сохраняемой в таблицах.
Стандарт SQL определяется ANSI (Американским Национальным Институтом Стандартов) и в данное время также принимается ISO (Международной Организацией по Стандартизации). Однако, большинство коммерческих программ баз данных расширяют SQL без уведомления ANSI, добавляя различные особенности в этот язык, которые, как они считают, будут весьма полезны. Иногда они несколько нарушают стандарт языка, хотя хорошие идеи имеют тенденцию развиваться и вскоре становиться стандартами "рынка" сами по себе в силу полезности своих качеств.
На данном уроке мы будем, в основном, следовать стандарту ANSI, но одновременно иногда будет показывать и некоторые наиболее общие отклонения от его стандарта.
Точное описание особенностей языка приводится в документации на СУБД, которую Вы используете. SQL системы InterBase 4.0 соответствует стандарту ANSI-92 и частично стандарту ANSI-III.
Состав языка SQL
Язык SQL предназначен для манипулирования данными в реляционных базах данных, определения структуры баз данных и для управления правами доступа к данным в многопользовательской среде.
Поэтому, в язык SQL в качестве составных частей входят:
язык манипулирования данными (Data Manipulation Language, DML)
язык определения данных (Data Definition Language, DDL)
язык управления данными (Data Control Language, DCL).
Подчеркнем, что это не отдельные языки, а различные команды одного языка. Такое деление проведено только лишь с точки зрения различного функционального назначения этих команд.
Язык манипулирования данными используется, как это следует из его названия, для манипулирования данными в таблицах баз данных. Он состоит из 4 основных команд:
SELECT | (выбрать) |
INSERT | (вставить) |
UPDATE | (обновить) |
DELETE | (удалить) |
Язык определения данных используется для создания и изменения структуры базы данных и ее составных частей - таблиц, индексов, представлений (виртуальных таблиц), а также триггеров и сохраненных процедур. Основными его командами являются:
CREATE DATABASE | (создать базу данных) |
CREATE TABLE | (создать таблицу) |
CREATE VIEW | (создать виртуальную таблицу) |
CREATE INDEX | (создать индекс) |
CREATE TRIGGER | (создать триггер) |
CREATE PROCEDURE | (создать сохраненную процедуру) |
ALTER DATABASE | (модифицировать базу данных) |
ALTER TABLE | (модифицировать таблицу) |
ALTER VIEW | (модифицировать виртуальную таблицу) |
ALTER INDEX | (модифицировать индекс) |
ALTER TRIGGER | (модифицировать триггер) |
ALTER PROCEDURE | (модифицировать сохраненную процедуру) |
DROP DATABASE | (удалить базу данных) |
DROP TABLE | (удалить таблицу) |
DROP VIEW | (удалить виртуальную таблицу) |
DROP INDEX | (удалить индекс) |
DROP TRIGGER | (удалить триггер) |
DROP PROCEDURE | (удалить сохраненную процедуру) |
Язык управления данными используется для управления правами доступа к данным и выполнением процедур в многопользовательской среде. Более точно его можно назвать "язык управления доступом". Он состоит из двух основных команд:
GRANT | (дать права) |
REVOKE | (забрать права) |
С точки зрения прикладного интерфейса существуют две разновидности команд SQL:
интерактивный SQL
встроенный SQL.
Интерактивный SQL используется в специальных утилитах (типа WISQL или DBD), позволяющих в интерактивном режиме вводить запросы с использованием команд SQL, посылать их для выполнения на сервер и получать результаты в предназначенном для этого окне. Встроенный SQL используется в прикладных программах, позволяя им посылать запросы к серверу и обрабатывать полученные результаты, в том числе комбинируя set-ориентированный и record-ориентированный подходы.
Реляционные операции. Команды языка манипулирования данными
Наиболее важной командой языка манипулирования данными является команда SELECT
Начнем с базовых операций реляционных баз данных. Таковыми являются:
выборка(Restriction)
проекция(Projection)
соединение(Join)
объединение(Union)
Операция выборки позволяет получить все строки (записи) либо часть строк одной таблицы.
SELECT * FROM country
Эти примеры иллюстрируют общую форму команды SELECT в языке SQL (для одной таблицы):
SELECT | (выбрать) специфицированные поля |
FROM | (из) специфицированной таблицы |
WHERE | (где) некоторое специфицированное условие является истинны |
Операция соединения позволяет соединять строки из более чем одной таблицы (по некоторому условию) для образования новых строк данных.