SQL: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Микеев (обсуждение | вклад) →Преимущества: пропущен предлог? |
0x7bit (обсуждение | вклад) |
||
Строка 10: | Строка 10: | ||
== История == |
== История == |
||
В начале [[1970-е|1970-х]] годов в компании [[IBM]] была разработана экспериментальная [[СУБД]] «System R» на основе языка ''SEQUEL'' |
В начале [[1970-е|1970-х]] годов в компании [[IBM]] была разработана экспериментальная [[СУБД]] «System R» на основе языка ''SEQUEL'' |
||
(''Structured English Query Language'' — структурированный английский язык запросов). Позже по юридическим соображениям язык ''SEQUEL'' был переименован в ''SQL''. Когда в 1986 году первый стандарт языка SQL был принят [[ANSI]] (American National Standards Institute), официальным произношением стало [,es kju:' el] — ''эс-кью-эл''. Несмотря на это, даже англоязычные специалисты по прежнему часто называют SQL ''сиквел'', вместо ''эс-кью-эл'' (по-русски также часто говорят «эс-ку-эль») |
(''Structured English Query Language'' — структурированный английский язык запросов). Позже по юридическим соображениям язык ''SEQUEL'' был переименован в ''SQL''. Когда в [[1986]] году первый стандарт языка SQL был принят [[ANSI]] (American National Standards Institute), официальным произношением стало [,es kju:' el] — ''эс-кью-эл''. Несмотря на это, даже англоязычные специалисты по прежнему часто называют SQL ''сиквел'', вместо ''эс-кью-эл'' (по-русски также часто говорят «эс-ку-эль»). |
||
Собственно разработкой языка запросов занимались Чэмбэрлин (Chamberlin) и [[Бойс, Рэй|Рэй Бойс]] (Ray Boyce). [[Селинджер, Пэт|Пэт Селинджер]] (Pat Selinger) занималась разработкой стоимостного оптимизатора (cost-based optimizer), [[Лори, Рэймонд|Рэймонд Лори]] (Raymond Lorie) занимался компилятором запросов. |
Целью разработки было создание простого непроцедурного языка, которым мог воспользоваться любой пользователь, даже не имеющий навыков программирования. Собственно разработкой языка запросов занимались Чэмбэрлин (Chamberlin) и [[Бойс, Рэй|Рэй Бойс]] (Ray Boyce). [[Селинджер, Пэт|Пэт Селинджер]] (Pat Selinger) занималась разработкой стоимостного оптимизатора (cost-based optimizer), [[Лори, Рэймонд|Рэймонд Лори]] (Raymond Lorie) занимался компилятором запросов. |
||
В [[1981]] году [[IBM]] объявила о своём первом основанном на SQL программном продукте — SQL/DS. Чуть позже к ней присоединились [[Oracle]], Relational Technology и другие производители. |
В [[1981]] году [[IBM]] объявила о своём первом основанном на SQL программном продукте — SQL/DS. Чуть позже к ней присоединились [[Oracle]], Relational Technology и другие производители. |
Версия от 13:24, 4 июля 2008
SQL (ˈɛsˈkjuˈɛl или ˈsiːkwəl) (англ. Structured Query Language — язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. Вопреки существующим заблуждениям, SQL является информационно-логическим языком, а не языком программирования.
SQL основывается на реляционной алгебре.
Язык SQL делится на три части:
- операторы определения данных (Data Definition Language, DDL)
- операторы манипуляции данными (Data Manipulation Language, DML)
- операторы определения доступа к данным (Data Control Language, DCL)
История
В начале 1970-х годов в компании IBM была разработана экспериментальная СУБД «System R» на основе языка SEQUEL (Structured English Query Language — структурированный английский язык запросов). Позже по юридическим соображениям язык SEQUEL был переименован в SQL. Когда в 1986 году первый стандарт языка SQL был принят ANSI (American National Standards Institute), официальным произношением стало [,es kju:' el] — эс-кью-эл. Несмотря на это, даже англоязычные специалисты по прежнему часто называют SQL сиквел, вместо эс-кью-эл (по-русски также часто говорят «эс-ку-эль»).
Целью разработки было создание простого непроцедурного языка, которым мог воспользоваться любой пользователь, даже не имеющий навыков программирования. Собственно разработкой языка запросов занимались Чэмбэрлин (Chamberlin) и Рэй Бойс (Ray Boyce). Пэт Селинджер (Pat Selinger) занималась разработкой стоимостного оптимизатора (cost-based optimizer), Рэймонд Лори (Raymond Lorie) занимался компилятором запросов.
В 1981 году IBM объявила о своём первом основанном на SQL программном продукте — SQL/DS. Чуть позже к ней присоединились Oracle, Relational Technology и другие производители.
Первый стандарт языка SQL был принят ANSI в 1986 и ISO (Международной организацией по стандартизации) в 1987 (так называемый SQL level 1) и несколько уточнён в 1989 году (SQL level 2). Дальнейшее развитие языка поставщиками СУБД потребовало принятия в 1992 нового расширенного стандарта (ANSI SQL-92 или просто SQL-2). Следующим стандартом стал SQL-99. В настоящее время действует стандарт, принятый в 2003 году (SQL-3). SQL по праву завоевал первенство среди аналогичных языков запросов.
Преимущества и недостатки
Преимущества
- Независимость от конкретной СУБД
Несмотря на наличие диалектов и различий в синтаксисе, в большинстве своём тексты SQL-запросов, содержащие DDL и DML, могут быть достаточно легко перенесены из одной СУБД в другую. Существуют системы, разработчики которых изначально закладывались на применение по меньшей мере нескольких СУБД (например: система электронного документооборота Documentum может работать как с Oracle Database, так и с Microsoft SQL Server и IBM DB2)
- Наличие стандартов
Наличие стандартов и набора тестов для выявления совместимости и соответствия конкретной реализации SQL общепринятому стандарту только способствует «стабилизации» языка.
- Декларативность
С помощью SQL программист описывает только то, какие данные нужно извлечь или модифицировать. То, каким образом это сделать решает СУБД непосредственно при обработке SQL запроса.
Недостатки
Несоответствие реляционной модели данных
Создатель реляционной модели данных Эдгар Кодд, Кристофер Дейт и их сторонники указывают на то, что SQL не является истинно реляционным языком. В частности они указывают на следующие проблемы SQL[1]:
- Повторяющиеся строки
- Неопределённые значения (nulls)
- Явное указание порядка колонок слева направо
- Колонки без имени и дублирующиеся имена колонок
- Отсутствие поддержки свойства «=»
- Использование указателей
- Высокая избыточность
В опубликованном Кристофером Дейтом и Хью Дарвеном Третьем Манифесте[2] они излагают принципы СУБД следующего поколения и предлагают язык Tutorial D, который является подлинно реляционным.
Сложность
Хотя SQL и задумывался как средство работы конечного пользователя, в конце концов он стал настолько сложным, что превратился в инструмент программиста.
Отступления от стандартов
Несмотря на наличие международного стандарта ANSI SQL-92, многие компании, занимающиеся разработкой СУБД (например, Oracle, Sybase, Microsoft, MySQL AB, Borland), вносят изменения в язык SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Таким образом появляются специфичные для каждой конкретной СУБД диалекты языка SQL.
В частности, для управления планом выполнения запроса в некоторые реализации SQL добавлены подсказки.
Сложность работы с иерархическими структурами
Ранее SQL не предлагал стандартного способа манипуляции древовидными структурами. Некоторые поставщики СУБД предлагали свои решения. Например, Oracle использует выражение «CONNECT BY». В настоящее время в качестве стандарта принята рекурсивная конструкция «WITH».
Стандарты
Ревизии SQL:
Год | Названия | Комментарии |
---|---|---|
1986 | SQL-86, SQL-87 | Впервые опубликован ANSI. Ратифицирован ISO в 1987. |
1989 | SQL-89 | Небольшие изменения. |
1992 | SQL-92, SQL-2 | Существенные изменения. |
1999 | SQL:1999, SQL-3 | Добавлены регулярные выражения, рекурсивные запросы, триггеры и некоторые обьекто-ориентированные нововведения. |
2003 | SQL:2003 | Объявлены XML-зависимые нововведения. |
Расширения
Процедурные
Поскольку SQL не является языком программирования (то есть не предоставляет средств для автоматизации операций с данными), вводимые разными производителями расширения касались в первую очередь процедурных расширений. Это хранимые процедуры (stored procedures) и процедурные языки-"надстройки". Практически в каждой СУБД применяется свой процедурный язык. Например, в Oracle — PL/SQL, основанный на языке Ada[3]; в Sybase SQL Server и MS SQL Server — Transact-SQL.
См. также
Ссылки
Русскоязычные сайты
- Русскоязычный форум по СУБД и SQL
- Упражнения по SQL. Самоучитель по SQL DML (На русском и английском языках)
- SQL введение и руководство
- Краткий курс SQL
Зарубежные сайты
- Весь текст стандарта SQL-92 (англ.)
Литература
- Бен Форта «Освой самостоятельно язык запросов SQL», 3-е издание : Пер. с англ. - М. : 2005. - 288 стр. с ил., «Диалектика»
- Пол Уилтон, Джон Колби «Язык запросов SQL для начинающих» : Пер. с англ. - М. : 2005. - 496 стр. с ил., «Диалектика»
- К. Дж. Дейт (C.J. Date). Введение в системы баз данных, 8-е издание : Пер.с англ. - М. : 2005. - 1328 стр. с ил., «Вильямс»
- Наиболее интересные новшества в стандарте SQL:2003
- Кевин Клайн «SQL. Спрaвочник» - М. : 2006. - 832 стр.., «КУДИЦ-ОБРАЗ»
Примечания
- ↑ O'Reilly Network. An Interview with Chris Date
- ↑ The Third Manifesto
- ↑ Pete Finnigan, Principal Consultant - How to unwrap PL/SQL (англ.)