Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

OraLessons-I / Les-00-Intro

.doc
Скачиваний:
14
Добавлен:
20.03.2015
Размер:
55.3 Кб
Скачать

Что такое SQL?

Structured Query Language — язык, первоначально задумывавшийся как инструмент работы с реляционными базами данных, но с этой ролью в конце концов не справившийся.

Состоит из нескольких "подъязыков" разной функциональной направленности:

  1. Запросы к данным БД (query language, QL) — выборка данных из таблиц предложением SELECT.

  2. Язык манипулирования данными ("обработки данных"), ЯМД; Data Manipulation Language (DML) — изменение данных в существующих таблицах.

  3. Язык управления транзакциями — например, фиксация или отмена произведенных программой изменений в БД.

  4. Язык определения данных (ЯОД); Data Definition Language (DDL) — например, создание таблиц и прочих объектов хранения или изменение их свойств.

  5. Язык управления данными (ЯУД; data control language, DCL) — управление разрешением доступа к данным путем выдачи или изъятия полномочий командами GRANT и REVOKE, заданием в системе пользователей данных.

Единицами языка являются "команды", или "предложения" (commands, они же statements), или же "операторы". Слово "запрос" (query) иногда трактуют расширительно, понимая под ним любую команду SQL как "запрос к БД". С другой стороны, предложения SELECT часто обсуждают вместе с предложениями категории DML и в таких случаях иногда причисляют к последним.

Общие структурные свойства предложений DML и запросов можно охарактеризовать следующим образом:

- Непроцедурность. Проявляется двояко:

  1. Каждое предложение SQL является самодостаточным; предложения SQL не предназначены для процедурного описания действий.

  2. Считается, что запрос к данным в SQL формулируется не указанием процедуры вычисления результата, а описанием свойств результата (statement буквально "утверждение"); СУБД же по указанным программистом свойствам автоматически строит последовательность действий, приводящую к требуемому результату. Современный SQL содержит некоторые отклонения от такой непроцедурности.

- Множественность. Запросы SQL на выборку и изменение данных есть операции с множествами строк, не предполагающими упорядоченности.

По способу использования предложения SQL разделяются на две разновидности:

- Диалоговый SQL. Вариант формулировок предложений языка (на выборку и изменение данных), предполагающий диалог программиста с СУБД по схеме "вопрос-ответ". Пример — работа с БД через программу Oracle SQL*Plus.

- Встроенный SQL. Вариант формулировок языка, предполагающий размещение предложений SQL в программе (на C, C++, Cobol, Java, PL/SQL и проч.).

Вторая разновидность — встроенный SQL — фактически отражает превращение SQL в язык программирования БД. Именно в таком качестве он сейчас главным образом используется, невзирая на то, что задумывался когда-то языком для конечного пользователя. Похожие изменения жизнью замыслов создателей наблюдаются и в других продуктах информационных технологий, например, в Java.

История и стандарты

Первая версия SQL была предложена в 1973 году фирмой IBM под названием Sequel. В 1980 году этой же фирмой язык был воплощен уже под нынешним названием в проекте System R по построению прототипа реляционной СУБД. Успех System R дал начало многочисленным попыткам разных фирм воспроизвести эту систему, а вместе с ней SQL. Первый коммерческий результат такой деятельности принадлежит нынешней фирме Oracle. (Формулировки некоторых команд SQL в Oracle до сих пор напоминают о System R фирмы IBM.)

Для борьбы с несовместимостью воплощений SQL в разных системах язык вскоре оказался вовлечен в активную деятельность по стандартизации, проводившуюся разными организациями в разное время: в том числе X/Open Group, SQL Access Group, FIPS, Госстандарт РФ.

Сейчас действуют два комитета по стандартизации SQL: ANSI (в США) и ISO (международный), работающие синхронно.

Основные вехи стандартизации перечислены ниже.

SQL-86 (1986/1987 гг.);

SQL-89 (1989 г.; фактически SQL-86 с малыми добавками);

SQL-92 (синонимы: SQL2, SQL92; 1992 г.):

- Вводный уровень (Entry Level),

- Переходный уровень (Transitional Level),

- Промежуточный уровень (Intermediate Level),

- Полный уровень (Full Compliance);

SQL:1999 (синонимы: SQL3, SQL-95, SQL1999, SQL-99, SQL99; главные дополнения — объектные возможности языка, хранимые процедуры):

- Основной уровень (Core),

- Расширенный уровень (Optional);

SQL:2003 (пример дополнений — возможности XML). С этого момента очередные версии стандарта выходят не в полном объеме, как прежде, а в виде "дополнительных частей";

SQL:2006 (развивает расширения, касающиеся XML, возникшие в SQL:2003);

SQL:2008 (ряд частных дополнений, как, например, TRUNCATE TABLE или выдача первых N записей).

Исторически SQL — не единственный предлагавшийся язык доступа к БД, а по мнению некоторых специалистов — и не лучший. Стандартизация SQL — одна из причин, по которой именно он получил широкое признание. Теоретически стандартизация обеспечивает независимость прикладных программ от типа используемой СУБД. Практически же каждый разработчик СУБД, включая фирму Oracle, предлагает не чисто стандартную реализацию, а собственный диалект SQL.

Противоречивость процессов стандартизации состоит в том, что коммерческие фирмы-разработчики склонны в первую очередь к собственным решениям, и только во вторую заинтересованы в общих; потребители же в первую очередь заинтересованы в общих решениях, и только во вторую — в частных. Росту диалектов способствует отсутствие в стандартах SQL однозначных предложений для некоторых свойств, например:

- выдача даты и времени суток,

- порождение значений для искусственных ключей,

- семантика некоторых типов данных.

Исходное название — Sequel — происходит как сокращение от Structured English Query Language (так что некоторые ветераны программирования по сию пору произносят SQL как "сиквел"). Слово english в полном названии неслучайно: нынешний SQL замысливался в виде такого подмножества естественного языка, на котором потребитель данных мог бы обращаться к БД. Со временем метаморфоза произошла с "потребителем". Раньше полагали, что им будет конечный пользователь, а в наше время им оказался программист. Теперешний конечный пользователь как правило ничего не знает о SQL, работая с БД средствами графики или более высокого (по крайней мере архитектурно) уровня, построенными с помощью SQL, но уже программистом. Тем не менее, как и раньше, многие предложения на SQL действительно напоминают обычные человеческие высказывания. В этом таится большая опасность для программиста, так как на деле SQL — формальный язык (хоть и не самый сложный), который от человеческого отделяет пропасть. Выписывая предложение на SQL, программист нередко подсознательно пытается осмыслить написанное по-человечески, что иногда не страшно, но чаще совершенно искажает совершаемое СУБД на деле. Можно привести массу примеров, когда по-человечески воспринимаемая запись на SQL в действительности означает совсем иное. Заложенная когда-то в Sequel близость к формулировкам на английском языке вынуждает сегодняшнего программиста на SQL все время быть начеку. Показательно, что в расшифровке SQL (Structured Query Language) слово English выпало, но инерция развития языка сохраняется.

4

Соседние файлы в папке OraLessons-I