SQL (Structured Query Language) — Структурированный Язык Запросов — стандартный язык запросов по работе с реляционными БД. Язык SQL появился после реляционной алгебры, и его прототип был разработан в конце 70-х годов в компании IBM Research. Он был реализован в первом прототипе реляционной СУБД фирмы IBM System R. В дальнейшем этот язык применялся во многих коммерческих СУБД и в силу своего широкого распространения постепенно стал стандартом «де-факто» для языков манипулирования данными в реляционных СУБД.
Первый международный стандарт языка SQL был принят в 1989 г. (далее мы будем называть его SQL/89 или SQL1). Иногда стандарт SQL1 также называют стандартом ANSI/ISO, и подавляющее
большинство доступных на рынке СУБД поддерживают этот стандарт полностью. Однако
развитие информационных технологий, связанных с базами данных, и необходимость
реализации переносимых приложений потребовали в скором времени доработки и расширения
первого стандарта SQL.
В конце 1992
г. был принят новый международный стандарт языка SQL, который в дальнейшим будем
называть SQL/92 или SQL2. И он не лишен недостатков, но в то же время является
существенно более точным и полным, чем SQL/89. В настоящий момент большинство
производителей СУБД внесли изменения в свои продукты так, чтобы они в большей
степени удовлетворяли стандарту SQL2.
В 1999 году появился новый стандарт, названный SQL3.
Если отличия между стандартами SQL1
и SQL2 во многом были количественными, то стандарт SQL3 соответствует качественным
серьезным преобразованиям. В SQL3 введены новые типы данных, при этом предполагается
возможность задания сложных структурированных типов данных, которые в большей степени соответствуют объектной ориентации.
Наконец, добавлен раздел, который вводит стандарты на события и триггеры, которые
ранее не затрагивались в стандартах, хотя давно уже широко использовались в
коммерческих СУБД. В стандарте определены возможности четкой спецификации триггеров
как совокупности события и действия. В качестве действия могут выступать не
только последовательность операторов SQL, но и операторы управления ходом выполнения
программы. В рамках управления транзакциями произошел возврат к старой модели
транзакций, допускающей точки сохранения (savepoints).
Возможность указания в операторе отката ROOLBACK точек возврата позволит откатывать транзакцию не в начало, а в промежуточную ранее сохраненную точку. Такое решение повышает гибкость реализации сложных алгоритмов обработки информации.
В настоящее время действует стандарт, принятый в 2003 году (SQL:2003) с небольшими модификациями, внесёнными позже в 2008 г.
Год |
Название |
Иное название |
Изменения |
1986 |
SQL-86 |
SQL-87 |
Первый вариант стандарта, принятый институтом ANSI и одобренный ISO в 1987 году. |
1989 |
SQL-89 |
FIPS 127-1 |
Немного доработанный вариант предыдущего стандарта. |
1992 |
SQL-92 |
SQL2, FIPS 127-2 |
Значительные изменения (ISO 9075); уровень Entry Level стандарта SQL-92 был принят как стандарт FIPS 127-2. |
1999 |
SQL:1999 |
SQL3 |
Добавлена поддержка регулярных выражений, рекурсивных запросов, поддержка триггеров, базовые процедурные расширения, нескалярные типы данных и некоторые объектно-ориентированные возможности. |
2003 |
SQL:2003 |
Введены расширения для работы с XML-данными, оконные функции (применяемые для работы с OLAP-базами данных), генераторы последовательностей и основанные на них типы данных. |
|
2006 |
SQL:2006 |
Функциональность работы с XML-данными значительно расширена. Появилась возможность совместно использовать в запросах SQL и XQuery. |
|
2008 |
SQL:2008 |
Улучшены возможности оконных функций, устранены некоторые неоднозначности стандарта SQL:2003 |
А зачем вообще нужны эти стандарты? Зачем их изобретают и почему надо изучать их? Текст стандарта
SQL2 занимает 600 станиц сухого формального текста, это очень много, и кажется,
что это просто происки разработчиков стандартов, а не то, что необходимо рядовым
разработчикам. Однако ни один серьезный разработчик, работающий с базами данных,
не должен игнорировать стандарт, и для этого существуют весьма веские причины.
Разработка любой информационной системы, ориентированной на технологию баз данных (а других информационных систем на настоящий момент практически нет), является трудоемким процессом, занимающим несколько десятков и даже сотен человеко-месяцев. Следует отдавать себе отчет, что нельзя разработать сколько-нибудь серьезную систему за несколько дней.
Кроме того, развитие вычислительной техники, систем телекоммуникаций
и программного обеспечения столь стремительно, что проект может устареть еще
до момента внедрения. Но развивается не только вычислительная техника, изменяются
и реальные объекты, поведение которых моделируется использованием как самой
БД, так и процедур обработки информации в ней, то есть конкретных приложений,
которые составляют реальное наполнение разрабатываемой информационной системы.
Именно поэтому проект информационной системы должен быть рассчитан на расширяемость
и переносимость на другие платформы. Большинство поставщиков аппаратуры и программного
обеспечения следуют стратегии поддержки стандартов, в противном случае пользователи
просто не будут их покупать. Однако каждый поставщик cтремится улучшить свой
продут введением дополнительных возможностей, не входящих в стандарт. Выбор
разработчиков, следовательно, таков: ориентироваться только на экзотические
особенности данного продукта либо стараться в основном придерживаться стандарта.
Во втором случае весь интеллектуальный труд, вкладываемый в разработку, становится
более защищенным, так как система приобретает свойства переносимости. И в случае
появления более перспективной платформы проект, ориентированный в большей степени
на стандарты, может быть легче перенесен на нее, чем тот, который в основном
ориентировался на особенности конкретной платформы. Кроме того, стандарты —
это верный ориентир для разработчиков, так как все поставщики СУБД в своих перспективных
разработках обязательно следуют стандарту, и можно быть уверенным, что в конце
концов стандарт будет реализован практически во всех перспективных СУБД. Так
произошло со стандартом SQL1, так происходит со стандартом SQL2 и так будет
происходить со стандартом SQL3.
Для поставщиков
СУБД стандарт — это путеводная звезда, которая гарантирует правильное направление
работ. А вот эффективность реализации стандарта — это гарантия успеха.
SQL нельзя
в полной мере отнести к традиционным языкам программирования, он не содержит
традиционные операторы, управляющие ходом выполнения программы, операторы описания
типов и многое другое, он содержит только набор стандартных операторов доступа
к данным, хранящимся в базе данных. Операторы SQL встраиваются в базовый язык
программирования, которым может быть любой стандартный язык типа C++, PL, COBOL
и т. д. Кроме того, операторы SQL могут выполняться непосредственно в интерактивном
режиме.