ЯЗЫК SQL
Общие сведения о языке SQL
В предыдущих разделах мы рассмотрели «штатные» средства манипулирования данными, поддерживаемые реляционной моделью, — реляционная алгебра и реляционное исчисление. Однако на практике крайне редко одно из этих средств принимается в качестве полной основы какого-либо языка базы данных. Так, и SQL (Structured Query Language — структурированный язык запросов) основывается на некоторой смеси алгебраических и логических конструкций.
Язык SQL (эта аббревиатура должна произноситься как «сику- ель», однако все чаще говорят «эс-ку-эль») в настоящее время является промышленным стандартом, который в большей или меньшей степени поддерживает любая СУБД, претендующая на звание «реляционной». В то же время SQL подвергается суровой критике как раз за недостаточное соответствие реляционным принципам (см., например, статью X. Дарвина и К. Дейта «Третий манифест», опубликованную в журнале СУБД № 1 за 1996 год).
Из истории SQL
В начале 70-х гг. в компании IBM была разработана экспериментальная СУБД System R на основе языка SEQUEL, который можно считать непосредственным предшественником SQL. Целью разработки было создание простого непроцедурного языка, которым мог воспользоваться любой пользователь, даже не имеющий навыков программирования. В 1981 г. IBM объявила о своем первом, основанном на SQL программном продукте, SQL/DS. Чуть позже к ней присоединились Oracle и другие производители. Первый стандарт языка SQL был принят Американским национальным институтом стандартизации (ANSI) в 1987 г. (так называемый SQL level (уровень) 1) и несколько уточнен в 1989 г. (SQL level 2). Дальнейшее развитие языка поставщиками СУБД потребовало принятия в 1992 г. нового расширенного стандарта (ANSI SQL-92, или просто SQL2). В настоящее время действует стандарт 2003 г. с модификациями, внесенными в 2006 и 2008 г., который известен как SQL3.
Заметим, что, хотя SQL и задумывался как средство работы конечного пользователя, в конце концов, он стал настолько сложным, что превратился в инструмент программиста. Вопросы создания приложений обработки данных с использованием SQL рассматриваются в конце данного раздела.
В SQL определены два подмножества языка:
- • SQL-DDL (Data Definition Language) — язык определения структур и ограничений целостности баз данных. Сюда относятся команды создания и удаления баз данных; создания, изменения и удаления таблиц; управления пользователями и т.д.;
- • SQL-DML (Data Manipulation Language) — язык манипулирования данными: добавление, изменение, удаление и извлечение данных, управления транзакциями.
Здесь не дается строгого описания всех возможностей SQL. Во- первых, ни одна СУБД не поддерживает их в полной мере, а во-вторых, производители СУБД часто предлагают собственные расширения SQL, не совместимые друг с другом. Поэтому мы рассматриваем некое подмножество языка, которое дает общее представление о его специфике и возможностях. В то же время этого подмножества достаточно, чтобы начать самостоятельную работу с любой СУБД.
Следует также отметить, что в отличие от «теоретической» терминологии, используемой при описании реляционной модели {отношение, атрибут, кортеж), в литературе при описании SQL часто используется терминология «практическая» (соответственно — таблица, столбец, строка). Здесь мы следуем этой традиции.
Все примеры построены применительно к базе данных publications, содержащей сведения о публикациях (как печатных, так и электронных), относящихся к теме данного курса. Структура этой базы данных представлена на рис. 6.9, ее проектирование описано в разделе 6.4.