Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ИОСУ часть 2 _SQL.doc
Скачиваний:
19
Добавлен:
10.11.2019
Размер:
3.88 Mб
Скачать

2. Общие сведения о sql

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

В начале 1970-х годов в одной из исследовательских лабораторий компании IBM была разработана экспериментальная реляционная СУБД System R (англ.), для которой затем был создан специальный язык SEQUEL, позволявший относительно просто управлять данными в этой СУБД. Аббревиатура SEQUEL расшифровывалась как Structured English QUEry Language - структурированный английский язык запросов. Позже по юридическим соображениям язык SEQUEL был переименован в SQL и официальным произношением стало [,es kju:' el] - эс-кью-эл.

Первыми СУБД, поддерживающими новый язык, стали в 1979 году OracleV2 для машин VAX от компании Relational Software Inc. и System/38 от IBM, основанная на System/R.

Первый официальный стандарт языка SQL был принят ANSI в 1986 году и ISO в 1987 году (так называемый SQL-86) и несколько уточнён в 1989 году. Дальнейшее развитие языка поставщиками СУБД потребовало принятия в 1992 году нового расширенного стандарта (ANSI SQL-92 или просто SQL2). Следующим стандартом стал SQL:1999 (SQL3). В настоящее время действует стандарт, принятый в 2003 году (SQL:2003) с небольшими модификациями, внесёнными позже.

История версий стандарта представлена в таблице:

Таблица

Год

Название

Иное

название

Изменения

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

Основные преимущества использования SQL:

1. Независимость от конкретной СУБД. Несмотря на наличие диалектов, и различий в синтаксисе, в большинстве своём тексты SQL-запросов, содержащие DDL и DML операторы, могут быть достаточно легко перенесены из одной СУБД в другую. Естественно, что при применении некоторых специфичных для реализации возможностей такой переносимости добиться очень трудно.

2. Наличие стандартов. Наличие стандартов и набора тестов для выявления совместимости и соответствия конкретной реализации SQL общепринятому стандарту способствует «стабилизации» языка. Однако стандарт местами чересчур формализован и раздут в размерах, например, Core-часть стандарта SQL:2003 представляет собой более 1300 страниц текста.

3. Декларативность. С помощью SQL программист описывает, какие данные нужно извлечь или модифицировать. То, каким образом это сделать, решает СУБД непосредственно при обработке SQL-запроса, но при этом полезно представлять, как СУБД будет разбирать текст его запроса. Особенно критичными такие моменты становятся при работе с большими базами данных и со сложными запросами, - чем сложнее сконструирован запрос, тем больше он допускает вариантов написания, различных по скорости выполнения, но одинаковых по итоговому набору данных.

Кроме этого, можно отметить и ряд недостатков:

1. Несоответствие реляционной модели данных. Создатель реляционной модели данных Эдгар Кодд, Кристофер Дейт и их сторонники указывают на то, что SQL не является истинно реляционным языком. В частности они указывают на следующие проблемы SQL:

- повторяющиеся строки;

- неопределённые значения (NULL);

- явное указание порядка колонок слева направо;

- колонки без имени и дублирующиеся имена колонок;

- использование указателей и т.д.

2. Сложность. Хотя SQL и задумывался, как средство работы конечного пользователя, в конце концов, он стал настолько сложным, что превратился в инструмент программиста.

3. Отступления от стандартов. Несмотря на наличие международного стандарта ANSI SQL-92, многие компании, занимающиеся разработкой СУБД (например, Oracle, Sybase, Microsoft, MySQL), вносят изменения в язык SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Таким образом, появляются специфичные для каждой конкретной СУБД диалекты языка SQL. Существует четыре уровня соответствия реализации SQL стандарту:

- entry (базовый);

- transitional (переходный);

- intermediate (промежуточный);

- full (полный).

4. Сложность работы с иерархическими структурами. Ранее SQL не предлагал стандартного способа манипуляции древовидными структурами. Некоторые поставщики СУБД предлагали свои решения. Например, Oracle использует выражение CONNECT BY. В настоящее время в качестве стандарта принята рекурсивная конструкция WITH.

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

Таблица

СУБД

Краткое название

Расшифровка

Borland InterBase,

Firebird

PSQL

Procedural SQL

IBM DB2

SQL PL

SQL Procedural Language (расширяет SQL/PSM)

Microsoft SQL Server, Sybase ASE

Transact-SQL

Transact-SQL

MySQL

SQL/PSM

SQL/Persistent Stored Module (стандарт SQL:2003)[

Oracle

PL/SQL

Procedural Language/SQL (основан на языке Ada)

PostgreSQL

PL/pgSQL

Procedural Language/PostgreSQL (очень похож на Oracle PL/SQL)