Большинство современных СУБД построено на реляционной модели данных. Для получения информации из отношений (таблиц) базы данных в качестве языка манипулирования данными в теоретическом плане используются абстрактных язык реляционной алгебры.
В качестве практического языка работы с данными в середине 70-х годов фирмой IBM разработан язык структурных запросов SQL, ставший впоследствии стандартом de-facto при работе с базами данных. Не смотря на то, SQL часто подвергается суровой критике за недостаточное соответствие реляционным принципам, его изучение является актуальным как в практическом плане, так и чисто в теоретическом.
История развития языка SQL
Работа над созданием языка была начата сразу после появления статью Э.Кодда в 1970г. в лабораториях компании IBM для проверки возможностей реляционной модели.
СУБД System R - экспериментальная исследовательская система с языком SEQUEL (позже SQL), созданная IBM:
Все фирмы провозглашают соответствие стандарту SQL
Реализованные диалекты очень близки
Путь "сверху вниз" - уточнение и упрощение SQL System R
Путь "снизу вверх" - от диалектов реализации различных фирм (наращивание возможностей, обычное отсутствие полного описания языка)
Стандартизация SQL
Все фирмы провозглашают соответствие стандарту SQL
Реализованные диалекты очень близки
Деятельность началась одновременно с появлением первых коммерческих реализаций
В качестве стандарта нельзя было использовать SQL System R(не было технической проработки, слишком сложно реализовать)
Нельзя было принять за стандарт коммерческий диалект (слишком различались)
Международный стандарт 1989 г.
Во многих частях имеет чрезвычайно общий характер и допускает очень широкое толкование
Отсутствуют важные разделы (манипулирование схемой БД, динамический SQL, многое определяется в реализации)
Наибольшие достижения (стандартизация синтаксиса и семантики операторов выборки и манипулирования данными, фиксация средств ограничений целостности БД: определение первичного и внешнего ключей отношений, проверочные ограничения целостности)
Международный стандарт 1992 г. (SQL2)
Расширено манипулирование таблицами (Alter table, Drop table)
Возможность управления доменами (Create domain имя char(25) . . .и при определении имен столбцов эти имена определяются через имена доменов)
Новые типы данных (Date, Time, Datetime, . . .) и новые функции
Управление транзакциями и сессиями (сессия - последовательность транзакций, в пределах которой сохраняются временные отношения)
Подключение к БД
Развитие динамического SQL
В 1995 г. стандарт был дополнен спецификацией интерфейса уровня вызова (Call-Level Interface - SQL/CLI). SQL/CLI представляет собой набор спецификаций интерфейсов процедур, вызовы которых позволяют выполнять динамически задаваемые операторы SQL. По сути дела, SQL/CLI представляет собой альтернативу динамическому SQL и послужил основой для создания повсеместно распространенных сегодня интерфейсов ODBC (Open Database Connectivity) и JDBC (Java Database Connectivity).
В 1996 г. к стандарту SQL/92 был добавлен еще один компонент - SQL/PSM (Persistent Stored Modules). Основная цель этой спецификации состоит в том, чтобы стандартизировать способы определения и использования хранимых процедур, т. е. специальным образом оформленных программ, включающих операторы SQL, которые сохраняются в базе данных, могут вызываться приложениями и выполняются внутри СУБД.
Стандарт SQL:1999 (SQL3)
Незадолго до завершения работ по определению стандарта SQL2 была начата разработка стандарта SQL3. Реально работу над новым стандартом удалось частично завершить только в 1999 г., и по этой причине (а также в связи с проблемой 2000 года) стандарт получил название SQL:1999.
1999 г. были приняты пять первых частей стандарта SQL:1999. Первая часть (SQL/Framework) посвящена описанию концептуальной структуры стандарта: приводится развернутая аннотация следующих четырех частей.
Вторая часть SQL:1999 (SQL/Foundation) образует базис стандарта. Вводится система типов языка, формулируются правила определения функциональных зависимостей и возможных ключей, определяются синтаксис и семантика основных операторов SQL:
операторов определения и манипулирования схемой базы данных;
операторов манипулирования данными;
операторов управления транзакциями (расширенные модели транзакций, контрольные точки, многозвенные транзакций);
операторов управления подключениями к базе данных и т. д.
Третью часть занимает уточненная по сравнению с SQL/92 спецификация SQL/CLI. В четвертой части специфицируется SQL/PSM - синтаксис и семантика языка определения хранимых процедур (стандарт синтаксиса триггеров и процедур). Наконец, в пятой части - SQL/Bindings - определяются правила связывания SQL для стандартных версий языков программирования FORTRAN, COBOL, PL/1, Pascal, Ada, C и MUMPS.
В стандарт SQL:1999 не вошли и существуют в виде отдельных стандартов:
стандарт управления распределенными транзакциями (SQL/Transaction);
стандарт поддержки темпоральных свойств данных (SQL/Temporal);
стандарт управления внешними данными (SQL/MED);
поддержка оперативной аналитической обработки (SQL/OLAP).
Стандарт SQL:2003
Кроме исправления некоторых неточностей допущенных в SQL:1999, стандарт SQL:2003 внес ряд новшеств:
· Изменена структура организации стандарта (часть SQL/Bindings объединена с SQL/Foundation, новые части SQL/Schemata, SQL/JRT (Java) и SQL/XML);
· Изменения в системе типов данных (исключена поддержка битовых строк BIT и BIT VARYING, добавлен конструктор типов мультимножеств (MULTISET), новый тип BIGINT и тип XML);
· Табличные функции (возвращают на выходе таблицу);
· Расширенные возможности оператора CREATE TABLE (создание подобных уже существующим таблиц (LIKE) или частичный экспорт структуры (AS);
· Идентифицирующие столбцы (identity columns) и генерируемые столбцы (generated columns);
· Оператор MERGE для обновления базы (объединение шагов INSERT и UPDATE при обновлении одной таблицы ил другой);
SQL в примерах
Далее приведены примеры использования SQL для решения типичных задач. Общая схема примеров по каждой теме следующая: ставится содержательная задача, предлагается запись запроса на языке SQL, дается результат запроса. При необходимости поясняются конструкции языка SQL и делаются другие замечания методического характера, способствующие усвоению материала.
Будем исходить из того, что в нашем распоряжении имеется база данных (точнее схема базы данных) поставщиков, деталей и поставок, таблицы которой описаны следующим образом:
Таблица поставщиков S:
Create table S (n_post char(5) not NULL,
name char(20),
reiting smallint,
town char(15))
Таблица деталей Р:
Create table P (n_det char(6) ,
name char(20),
cvet char(7),
ves smallint,
town char(15))
Таблица поставок SP:
Create table SP (n_post char(5) ,
n_det char(6),
date_post date,
kol smallint)
Замечания. Структура приведенной базы данных максимально упрощена: в таблицах отсутствуют ограничения, первичные ключи и пр. Сделано это осмысленно, поскольку предметом данного методического пособия является изучение основ языка SQL, а не принципов проектирования реляционных баз данных.