— язык структурированных запросов

Введение в SQL

Различают два вида языков запросов для реляционной модели данных.

Алгебраические языки позволяют выразить запросы средствами специальных операторов над отношениями — операторов реляционной алгебры.

Языки реляционного исчисления позволяют описать запросы на языке исчисления предикатов — языке математической логики.

Алгебраические языки являются процедурными языками. Языки реляционного исчисления относятся к классу декларативных языков, т. е. языков более высокого уровня. Эти языки являются абстрактными языками и в чистом виде не реализованы, но они служат эталоном для оценки реальных языков запросов. По своим выразительным возможностям эти языки эквивалентны. Они были предложены в свое время автором реляционной модели Коддом для представления минимальных возможностей любого реального языка запросов реляционной модели. Восемь алгебраических операторов: объединение, пересечение, вычитание, декартово произведение, проекция, селекция, соединение и деление, — введенные Коддом, являются мерой оценки выразительной силы любого языка баз данных. Реальный язык баз данных обладает свойством реляционной полноты, если по своим выразительным возможностям он не уступает реляционной алгебре или реляционному исчислению.

Реальные языки запросов обычно обеспечивают не только реляционную полноту, но и другие возможности, выходящие за пределы реляционной алгебры или реляционного исчисления. К числу таких возможностей обычно относятся следующие операции:

  • • добавление данных;
  • • модификация данных;
  • • удаление данных;
  • • арифметические вычисления и сравнения;
  • • присваивание и отображение;
  • • вычисление функций агрегации, выполняемые над однородными элементами данных (вычисление количества, суммы, среднего, минимального или максимального значения и других).

Наиболее распространенным языком запросов реляционной модели данных в настоящее время является язык структурированных запросов SQL (Structured Query Language).

SQL нельзя отнести к конкретному виду языков. Он содержит в себе возможности и языка реляционного исчисления (исчисления кортежей), и алгебраического языка и несомненно является реляционно полным.

В силу исторических причин SQL стал стандартным реляционным языком и в настоящее время поддерживается практически всеми системами баз данных. Поэтому каждый специалист по базам данных должен быть знаком с ним.

В чистом виде как язык, поддерживающий реляционную модель, наиболее популярен стандарт языка, известный как SQL/92 (International Standard Database Language SQL).

Ни один из коммерческих продуктов не поддерживает в полной мере стандарт SQL/92. Известные версии этого языка, по образному выражению Дейта [2], можно назвать «надмножествами подмножеств» языка SQL/92. Другими словами, любая коммерческая система, не поддерживая некоторые аспекты стандарта, в других отношениях, возможно, превосходит его. Это замечание справедливо и в отношении версии SQL Microsoft Jet, реализованной в популярной СУБД MS Access.

Язык SQL является языком декларативного типа. В нем отсутствуют какие-либо команды управления ходом вычислительного процесса типа IF-THEN-ELSE, SWITCH, WHILE, DO-WHILE, FOR, GO TO и др. Управление ходом выполнения процесса обработки данных может выполняться интерактивно, в результате действий самого пользователя или при помощи процедурных языков программирования высокого уровня. В связи с этим различают две разновидности SQL — интерактивный и вложенный. По большей части обе формы работают одинаково, но используются различно.

Интерактивный SQL используется для функционирования непосредственно в базе данных и реализуется непосредственно при вводе пользователем отдельных команд. При такой форме SQL при вводе команды она сейчас же выполнится и вы сможете увидеть результат немедленно.

Вложенный SQL состоит из команд SQL внедренных внутрь программ, написанных на процедурных языках программирования высокого уровня, что делает программы более мощными и эффективными. Однако при таком способе управления процессом обработки данных приходится иметь дело со структурой SQL и стилем управления, который требует некоторых расширений к интерактивному SQL. На практике существуют два основных способа использования SQL в программах:

  • • внедрение SQL-операторов в исходный текст программы с последующей ее компиляцией и компоновкой;
  • • использование интерфейса прикладного программирования, специализирующегося на работе с базами данных.

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

В соответствии со стандартом SQL выразительные возможности языка распределены по шести типам подмножеств команд:

  • язык определения данных (Data Definition LanguageDDL), представлен инструкциями CREATE, ALTER, DROP;
  • язык манипулирования данными (Data Manipulation LanguageDML), представлен инструкциями INSERT, UPDATE, DELETE;
  • язык запросов данных (Data Query LanguageDQL), представлен многофункциональной командой SELECT;
  • языкуправления данными (Data Control LanguageDCL), представлен командами GRANT (предоставление привилегий) и REVOKE (отмена привилегий);
  • язык обработки транзакций (Transaction Processing LanguageTPL), включает команды BEGIN (начать транзакцию), COMMIT (завершить транзакцию), ROLLBACK (откатить транзакцию);

язык управления курсором (Cursor Control LanguageCCL) предназначен для выполнения операций с отдельными строками одной или нескольких таблиц, представлен командами DECLARE CURSOR, OPEN, CLOSE, FETCH INTO, DROP CURSOR.

К сожалению, эти подмножества не используются повсеместно во всех реализациях. Они подчеркиваются ANSI и полезны на концептуальном уровне. В частности, интерактивный Microsoft Jet SQL, реализованный в популярной СУБД MS Access, поддерживает только первые три подмножества.

 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ   След >