Язык структурированных запросов SQL
История SQL
Стандарты SQL
Основные команды SQL
Обработка команд SQL сервером Oracle
Стадии выполнения команды SQL
Выполнение команды DML
Выполнение команды SELECT
Выполнение команд DDL
Литература
Все операции над данными реляционной базы данных выполняются посредством языка доступа к данным, являющимся стандартным языком для систем управления реляционными базами данных. Таким стандартным языком является SQL – Structured Query Language (структурированный язык запросов).
Статья Кодда в 1970 году вызвала большой поток исследований, связанных с реляционными базами данных. Для реализации реляционной модели, фирма IBM в 1974 году начала разработку большого исследовательского проекта, названного System/R. Цель этого проекта заключалась в том, чтобы доказать работоспособность реляционной модели и приобрести опыт реализации реляционной СУБД.
В 1974 – 1975 годах на первом этапе выполнения проекта System/R был создан минимальный прототип реляционной системы управления базами данных. В это же время вышла первая статья с описанием языка запросов к базе данных, названного SEQUEL – Structured English Query Language (структурированный английский язык запросов).
В 1978 – 1979 годах на втором этапе выполнения проекта полностью переделанная реализация System/R была установлена на компьютерах нескольких заказчиков фирмы IBM для опытной эксплуатации. Эта эксплуатация принесла первый опыт работы с реляционной СУБД и с языком базы данных, который был переименован в SQL – Structured Query Language (структурированный язык запросов). Несмотря на изменение названия, произношение «сиквел» сохранилось и по сегодняшний день.
В 1979 году исследовательский проект System/R закончился, и IBM сделала заключение, что реляционные базы данных не только работоспособны, но и могут служить для создания коммерческих продуктов.
В 1982 году началась работа над официальным стандартом SQL. В 1986 году стандарт был утвержден Американским институтом национальных стандартов (American National Standards Institute – ANSI) под номером X3.135, а в 1987 году – как стандарт Международной организации по стандартам (International Standards Organization – ISO). Этот стандарт, пересмотренный в 1989 году, обычно называют стандартом «SQL-89» или «SQL1».
Многие из членов комитетов ANSI и ISO представляли различные фирмы – разработчики СУБД, в каждой из которых был реализован собственный диалект SQL. Эти диалекты были, в основном, похожи друг на друга, однако несовместимы в деталях. Поэтому комитет не стандартизовал некоторые части языка, определив, что они реализуются по усмотрению разработчика. Это позволило объявить большую часть реализаций SQL совместимой со стандартом, но сделало сам стандарт относительно слабым.
Чтобы исправить эту ситуацию, комитет ANSI создал проект более жесткого стандарта «SQL2» и «SQL3». Эти стандарты оказались более противоречивыми, чем исходный стандарт, т.к. предусматривали возможности, выходящие за рамки уже существующих программных продуктов, использующих SQL. Тем не менее, стандарт «SQL2», был окончательно принят комитетом ANSI в 1992 году.
Все существующие коммерческие продукты поддерживают, несмотря на стандарт SQL2, собственный диалект языка SQL. Однако ядро SQL стандартизировано достаточно жестко, и поставщики СУБД пытаются привести свои продукты в соответствие со стандартом.
Итак, SQL – структурированный язык команд для взаимодействия с сервером реляционных баз данных из любого инструментального пакета или приложения. Администратор базы данных использует язык запросов для формирования и обслуживания баз данных, а пользователь – для доступа к данным.
Возможности SQL:
§ Подходит разным пользователям, включая пользователей с самым малым опытом программирования, т.к. является достаточно простым и наглядным языком
§ Является непроцедурным языком. Пользователи описывают с помощью языка SQL то, что они хотят сделать, а компилятор SQL автоматически генерирует процедуры для навигации по базе данных и выполнения требуемой задачи
§ Сокращает время, необходимое для создания и сопровождения систем, т.к. является единым языком и для определения объектов, и для манипулирования данными
Несмотря на то, что Oracle SQL совместим со стандартом, некоторые свойства SQL2 не поддерживаются Oracle или отличаются от стандарта.
Команды SQL можно разделить на несколько категорий:
Команды |
Описание |
Язык манипулирования данными (DML) |
|
SELECT |
Извлекает данные из одной или более таблиц или представлений |
INSERT |
Добавляет новые строки в таблицу |
UPDATE |
Изменяет значения колонок в существующих строках таблицы |
DELETE |
Удаляет строки из таблиц |
LOCK TABLE* |
Накладывает блокировку на таблицу или представление, временно ограничивая доступ к объекту других пользователей |
EXPLAIN PLAN* |
Позволяет просмотреть план выполнения SQL-утверждения |
Язык определения данных (DDL) базы данных Определяют, изменяют определение или удаляют из словаря определение объектов базы данных |
|
CREATE |
Используются для создания структур данных. |
ALTER |
Используются для изменения структур данных. |
DROP |
Используются для удаления структур данных. |
RENAME* |
Изменяет имена объектов |
TRUNCATE* |
Усекает объекты (удаляет все строки, оставляя определение объекта) |
ANALYZE* |
Собирает статистики об объектах, проверяет структуру объектов |
COMMENT* |
Добавляет комментарии объектам в словарь данных |
Команды управления транзакциями Управляют изменениями, сделанными командами DML и группируют команды DML в одну транзакцию |
|
COMMIT |
Подтверждает изменения |
ROLLBACK |
Отменяет изменения до состояния данных на начало транзакции или до точки сохранения |
SAVEPOINT* |
Устанавливает точки сохранения, до которых можно отменить изменения |
SET TRANSACTION* |
Устанавливает свойства транзакции |
Язык управления доступом (DCL) Предоставляют или отменяют права доступа к базе данных Oracle и ее структурам |
|
GRANT |
Предоставляет права доступа к базе данных Oracle и ее структурам |
REVOKE |
Отменяет права доступа к базе данных Oracle и ее структурам |
Программный SQL Позволяет выполнять команды SQL из программных модулей |
|
DECLARE |
Определяет явный курсор |
OPEN |
Открывает курсор |
FETCH |
Выбирает строку из курсора |
CLOSE |
Закрывает курсор |
SELECT INTO* |
Извлекает данные из одной или более таблиц в программные переменные |
EXECUTE IMMEDIATE* |
Динамически выполняет оператор SQL |
* - Не являются частью стандарта ANSI/ISO, но используются в СУБД Oracle
Команды SQL проходят несколько стадий при обработке сервером Oracle. В процессе обработки задействованы различные процессы и структуры памяти Oracle (Рисунок 1).
Рисунок 1 Процессы и структуры памяти, участвующие в обработке команд SQL
· Команды SQL обрабатываются серверным процессом
· Идентичные команды SQL (дерево разбора и план выполнения) хранятся в одних и тех же разделяемых областях SQL разделяемого пула. Разделяемый пул располагается всегда в системной глобальной области. Команды SQL считаются идентичными, если:
o Их текст полностью идентичен, вплоть до регистра и количества пробелов
o Они ссылаются на одни и те же объекты
o Типы и имена используемых переменных совпадают
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.