Знаймо

Додати знання

приховати рекламу

Цей текст може містити помилки.

SQL



План:


Введення

SQL


Structured Query Language

Розширення

.sql

MIME

application/x-sql

Розроблено

ISO / IEC

Опубліковано

1986 ( 1986 )

Останній випуск

SQL: 2008 / 2008-12-21 ; 1095 days ago

Тип формату

Бази даних

Стандарт (и)

ISO / IEC 9075

Відкритий формат ?

Та

Сайт

[2]

SQL ( ɛskjuɛl ; англ. Structured Query Language - "Мова структурованих запитів") - універсальний комп'ютерну мову, вживаний для створення, модифікації та управління даними в реляційних базах даних. SQL грунтується на обчисленні кортежів.


1. Історія

1.1. Перші розробки

На початку 1970-х років в одній з дослідницьких лабораторій компанії IBM була розроблена експериментальна реляційна СУБД IBM System R, для якої потім був створений спеціальний мова SEQUEL, що дозволяв відносно просто управляти даними в цій СУБД. Абревіатура SEQUEL розшифровувалася як Structured English QUEry Language - "Структурований англійська мова запитів". Пізніше з юридичних міркувань [3] мова SEQUEL був перейменований в SQL. Коли в 1986 перший стандарт мови SQL був прийнятий ANSI ( American National Standards Institute ), Офіційним вимовою стало [, es kju: 'el] - ес-кью-ел. Незважаючи на це, навіть англомовні фахівці часто продовжують читати SQL як сиквел (по-русски також часто говорять "ес-ку-ель" або використовують жаргонізм "вилиці").

Метою розробки було створення простого непроцедурного мови, якою міг скористатися будь-який користувач, що навіть не має навичок програмування. Власне розробкою мови запитів займалися Дональд Чемберлін ( Donald D. Chamberlin ) І Рей Бойс ( Ray Boyce ). Пет Селінджер ( Pat Selinger ) Займалася розробкою вартісного оптимізатора ( cost-based optimizer ), Реймонд Лорі ( Raymond Lorie ) Займався компілятором запитів.

Варто зазначити, що SEQUEL був не єдиною мовою подібного призначення. В Каліфорнійському Університеті Берклі була розроблена некомерційна СУБД Ingres (що була, між іншим, далеким предком популярної зараз некомерційної СУБД PostgreSQL), яка була реляційної СУБД, але використовувала свою власну мову QUEL, який, однак, не витримав конкуренції за кількістю підтримуючих його СУБД з мовою SQL.

Першими СУБД, що підтримують нову мову, стали в 1979 Oracle V2 для машин VAX від компанії Relational Software Inc. (Згодом стала компанією Oracle) і System/38 від IBM, заснована на System / R.


1.2. Стандартизація

Оскільки до початку 80-х років існувало кілька варіантів СУБД від різних виробників, причому кожен з них мав власної реалізацією мови запитів, то було прийнято рішення розробити стандарт мови, який буде гарантувати переносимість ПЗ з однієї СУБД на іншу (природно, обидві з яких у повною мірою будуть підтримувати цей стандарт).

У 1983 році Міжнародна організація по стандартизації (ISO) і Американський національний інститут стандартів (ANSI) приступили до розробки стандарту мови SQL. Після безлічі консультацій і відхилення кількох попередніх варіантів у 1986 році ANSI представив свою першу версію стандарту, описаного в документі ANSI X3.135-1986 під назвою "Database Language SQL" ( рус. Мова баз даних SQL ). Неофіційно цей стандарт SQL-86 отримав назву SQL1. Рік по тому, була завершена робота над версією стандарту ISO 9075-1987 під тією ж назвою. Розробка цього стандарту велася під патронажем Технічного Комітету TC97 ( англ. Technical Committee TC97 ), Областю діяльності якого були процеси обчислення і обробки інформації ( англ. Computing and Information Processing ). Саме його підрозділ, іменоване як Підкомітет SC21 ( англ. Subcommittee SC21 ) Курирувало розробку стандарту, що стало запорукою ідентичності стандартів ISO та ANSI для SQL1 (SQL-86).

Стандарт SQL1 поділявся на два рівні. Перший рівень був підмножина другого рівня, описує весь документ в цілому. Тобто, така структура передбачала, що не всі специфікації стандарту SQL1 будуть ставитися до Рівню 1. Тим самим, постачальник, який заявляв про підтримку даного стандарту, повинен був заявляти про рівень, якому відповідає його реалізація мови SQL. Це значно полегшило прийняття і підтримку стандарту, оскільки виробники могли реалізовувати його підтримку в два етапи.

З часом до стандарту накопичилося кілька зауважень і побажань, особливо з точки зору забезпечення цілісності і коректності даних, в результаті чого в 1989 році даний стандарт був розширений, отримавши назву SQL89. Зокрема, в нього була додана концепція первинного та зовнішнього ключів. ISO-версія документа отримала назву ISO 9075:1989 "Database Language SQL with Integrity Enhancements" ( рус. Мова баз даних SQL з додаванням контролю цілісності ). паралельно була закінчена і ANSI-версія.

Відразу після завершення роботи над стандартом SQL1 в 1987 році була розпочата робота над новою версією стандарту, який повинен був замінити стандарт SQL89, отримавши назву SQL2, оскільки дата прийняття документа на той момент була невідома. Таким чином, фактично SQL89 і SQL2 розроблялися паралельно. Нова версія стандарту була прийнята в 1992 році, замінивши стандарт SQL89. Новий стандарт, озаглавлений як SQL92, являв собою по суті розширення стандарту SQL1, включивши себе безліч додатків були в попередніх версіях інструкцій.

Як і SQL1, SQL92 також був розділений на кілька рівнів, однак, по-вперше, число рівнів було збільшено з двох до трьох, а по-друге вони отримали назви замість порядкових цифр: початковий ( англ. entry ), Середній ( англ. intermediate ), Повний ( англ. full ). Рівень "повний" як і Рівень 2 в SQL1 увазі весь стандарт цілком. Рівень "початковий" представляв собою підмножина рівня "середній", в свою чергу представляв собою підмножина рівня "повний". Рівень "початковий" був порівнянний з Рівнем 2 стандарти SQL1, але специфікації цього рівня були дещо розширені. Таким чином, ланцюжок включень рівнів стандартів виглядала приблизно так:

 SQL1 Рівень 1 -> SQL1 Рівень 2 -> SQL92 "Початковий" -> SQL92 "Середній" -> SQL92 "Повний" 

Після прийняття стандарту SQL92 до нього були додані ще кілька документів, що розширюють функціональність мови. так, в 1995 році був прийнятий стандарт SQL / CLI (Call Level Interface, рус. Інтерфейс рівня викликів ), Згодом перейменований в CLI95. На наступний рік був прийнятий стандарт SQL / PSM (Persistent Stored Modules, рус. Постійно збережені модулі ), Що отримав назву PSM-96 [4].

Наступним стандартом став 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 [5]

1.3. Питання сумісності

За традицією, як і з багатьма стандартами в IT -індустрії, з мовою SQL виникла проблема: на якомусь етапі багато виробників використовує SQL програмного забезпечення вирішили, що функціонал в поточній (на той момент часу) версії стандарту недостатній, і його бажано розширити. В результаті у різних виробників систем управління базами даних (СКБД) в ходу різні діалекти SQL, в загальному випадку між собою несумісні.

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

Вперше поняття "рівня відповідності" було запропоновано в стандарті SQL-92. А саме, ANSI і NIST визначали чотири рівні відповідності реалізації цьому стандарту:

  1. Entry (базовий)
  2. Transitional (перехідний) - перевірку на відповідність цьому рівню проводив тільки NIST
  3. Intermediate (проміжний)
  4. Full (повний)

Легко можна зрозуміти, що кожен подальший рівень відповідності свідомо мав на увазі відповідність попередньому рівню. Далі, відповідно до даної драбинці стандартів будь-яка СУБД, яка відповідала рівню Entry, могла заявляти себе як "SQL-92 compliant", хоча насправді переносимість і відповідність стандарту обмежувалося набором можливостей, що входять в цей рівень.

Положення змінилося з введенням стандарту SQL: 1999. Відтепер стандарт придбав модульну структуру - основна частина стандарту була винесена в розділ "SQL / Foundation, всі інші були виведені в окремі модулі. Відповідно, залишився тільки один рівень сумісності - Core, що означало підтримку цієї основної частини. Підтримка інших можливостей залишена на розсуд виробників СУБД. Аналогічне положення мало місце і з подальшими версіями стандарту.


2. Введення

SQL є, передусім, інформаційно-логічним мовою, призначеним для опису, зміни та вилучення даних, що зберігаються в реляційних базах даних. SQL не можна назвати мовою програмування . [6]

Спочатку, SQL був основним способом роботи користувача з базою даних і дозволяв виконувати наступний набір операцій:

  • створення в базі даних нової таблиці;
  • додавання в таблицю нових записів;
  • зміна записів;
  • видалення записів;
  • вибірка записів з однієї або декількох таблиць (відповідно до заданого умовою);

а, також, зміна структур таблиць. З часом, SQL ускладнився - збагатився новими конструкціями, забезпечив можливість опису та управління новими збереженими об'єктами (наприклад, індекси, уявлення, тригери і процедури) - і став набувати рис, властиві мовам програмування.

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

Кожна пропозиція SQL - це запит або звернення до бази даних, яке призводить до зміни в базі даних. Відповідно до того, які зміни відбуваються в базі даних, розрізняють такі типи запитів:

  • запити на створення або зміну в базі даних нових чи існуючих об'єктів (при цьому в запиті описується тип і структура створюваного чи змінюваного об'єкта);
  • запити на отримання даних;
  • запити на додавання нових даних (записів)
  • запити на видалення даних;
  • звернення до СУБД.

Основним об'єктом зберігання реляційної бази даних є таблиця, тому всі SQL-запити - це операції над таблицями. Відповідно до цього, запити діляться на

  • запити, які оперують самими таблицями (створення та редагування таблиць);
  • запити, які оперують з окремими записами (або рядками таблиць) або наборами записів.

Кожна таблиця описується у вигляді перерахування своїх полів (стовпців таблиці) із зазначенням

  • типу збережених в кожному полі значень;
  • зв'язків між таблицями (завдання первинних і вторинних ключів);
  • інформації, необхідної для побудови індексів.

Запити першого типу, в свою чергу, діляться на запити, призначені для створення в базі даних нових таблиць, і на запити, призначені для зміни вже існуючих таблиць. Запити другого типу оперують з рядками, і їх можна розділити на запити такого вигляду:

  • вставка нового рядка;
  • зміна значень полів рядка або набору рядків;
  • видалення рядка або набору рядків.

Найголовніший вид запиту - це запит, який повертає (користувачеві) деякий набір рядків, з яким можна здійснити одну з трьох операцій:

  • переглянути отриманий набір;
  • змінити всі записи набору;
  • видалити всі записи набору.

Таким чином, використання SQL зводиться, по суті, до формування різноманітних вибірок рядків і здійсненню операцій над усіма записами, що входять у набір.


3. Опис

Мова SQL представляє собою сукупність

  • операторів;
  • інструкцій;
  • і обчислюваних функцій.

3.1. Оператори

Згідно загальноприйнятій стилю програмування, оператори (і інші зарезервовані слова) в SQL завжди слід писати прописними буквами [7].

Оператори SQL поділяються на:

  • оператори визначення даних ( Data Definition Language, DDL )
    • CREATE створює об'єкт БД (саму базу, таблицю, уявлення, користувача і т. д.)
    • ALTER змінює об'єкт
    • DROP видаляє об'єкт
  • оператори маніпуляції даними ( Data Manipulation Language, DML )
    • SELECT зчитує дані, що задовольняють заданим умовам
    • INSERT додає нові дані
    • UPDATE змінює існуючі дані
    • DELETE видаляє дані
  • оператори визначення доступу до даних ( Data Control Language, DCL )
    • GRANT надає користувачеві (групі) дозволу на певні операції з об'єктом
    • REVOKE відкликає раніше видані дозволи
    • DENY задає заборону, що має пріоритет над вирішенням
  • оператори управління транзакціями ( Transaction Control Language, TCL )
    • COMMIT застосовує транзакцію.
    • ROLLBACK відкатує всі зміни, зроблені в контексті поточної транзакції.
    • SAVEPOINT ділить транзакцію на більш дрібні ділянки.

4. Переваги та недоліки

4.1. Переваги

4.1.1. Незалежність від конкретної СУБД

Незважаючи на наявність діалектів і відмінностей в синтаксисі, в більшості своїй тексти SQL-запитів, що містять DDL і DML, можуть бути досить легко перенесені з однієї СУБД в іншу. Існують системи, розробники яких спочатку орієнтувалися на застосування щонайменше кількох СУБД (наприклад: система електронного документообігу Documentum може працювати як з Oracle, так і з Microsoft SQL Server і IBM DB2). Природно, що при застосуванні деяких специфічних для реалізації можливостей такої переносимості добитися вже дуже важко.


4.1.2. Наявність стандартів

Наявність стандартів і набору тестів для виявлення сумісності і відповідності конкретній реалізації SQL загальноприйнятому стандарту тільки сприяє "стабілізації" мови. Правда, варто звернути увагу, що сам по собі стандарт місцями занадто формалізований і роздутий в розмірах (наприклад, Core-частину стандарту SQL: 2003 є більше 1300 сторінок тексту).

4.1.3. Декларативність

За допомогою SQL програміст описує тільки те, які дані потрібно витягнути або модифікувати. Те, яким чином це зробити, вирішує СУБД безпосередньо при обробці SQL-запиту. Однак не варто думати, що це повністю універсальний принцип - програміст описує набір даних для вибірки або модифікації, проте йому при цьому корисно уявляти, як СУБД розбиратиме текст його запиту. Чим складніше сконструйований запит, тим більше він допускає варіантів написання, різних за швидкістю виконання, але однакових за підсумковим набору даних.


4.2. Недоліки

4.2.1. Невідповідність реляційної моделі даних

Творці реляційної моделі даних Едгар Кодд, Крістофер Дейт та їх прихильники вказують на те, що SQL не є істинно реляційних мовою. Зокрема, вони вказують на наступні проблеми SQL [8] :

  • Повторювані рядки
  • Невизначені значення (nulls)
  • Явна вказівку порядку колонок зліва направо
  • Колонки без імені і дублюються імена колонок
  • Відсутність підтримки властивості "="
  • Використання покажчиків
  • Висока надмірність

В опублікованому Крістофером Дейта і Х'ю Дарвеном Третьому Маніфесті [9] вони викладають принципи СУБД наступного покоління і пропонують мову Tutorial D, який є справді реляційних.


4.2.2. Складність

Хоча SQL і замислювався як засіб роботи кінцевого користувача, врешті-решт він став настільки складним, що перетворився на інструмент програміста.

4.2.3. Відхилення від стандартів

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

4.2.4. Складність роботи з ієрархічними структурами

Раніше діалекти SQL більшості СУБД не пропонували способу маніпуляції деревовидними структурами. Деякі постачальники СУБД пропонували свої рішення (наприклад, Oracle використовує вираз CONNECT BY). В даний час в ANSI стандартизована рекурсивна конструкція WITH з діалекту SQL DB2. В MS SQL Server рекурсивні запити з'явилися лише у версії MS SQL Server 2005.

5. Розширення

5.1. Процедурні розширення

Оскільки SQL не є мовою програмування (тобто не надає засобів для автоматизації операцій з даними), що вводяться різними виробниками розширення стосувалися в першу чергу процедурних розширень. Це збережені процедури ( stored procedures ) І процедурні мови-"надбудови". Практично в кожній СУБД застосовується свій процедурний мову. Стандарт для процедурних розширень представлений специфікацією SQL / PSM. Перелік процедурних розширень для найпопулярніших СУБД наведено в таблиці:

СУБД Коротка назва Розшифровка
InterBase / Firebird PSQL Procedural SQL
IBM DB2 SQL PL (англ.) SQL Procedural Language (розширює SQL / PSM); також в DB2 збережені процедури можуть писатися на звичайних мовах програмування: Сі, Java і т. д.
MS SQL Server /
Sybase ASE
Transact-SQL Transact-SQL
MySQL SQL / PSM SQL / Persistent Stored Module
Oracle PL / SQL Procedural Language / SQL (заснований на мові Ada)
PostgreSQL PL / pgSQL Procedural Language / PostgreSQL Structured Query Language (дуже схожий на Oracle PL / SQL)

Примітки

  1. Paul, Ryan A Guided Tour Of The Microsoft Command Shell - arstechnica.com/business/news/2005/10/msh.ars/4. Ars Technica.
  2. ISO / IEC 9075-1:2008: Information technology - Database languages ​​- SQL - Part 1: Framework (SQL / Framework) - www.iso.org/iso/catalogue_detail.htm?csnumber=45498.
  3. Andy Oppel. Databases Demystified - www.mhprofessional.com/product.php?cat=112&isbn=0071469605 - San Francisco, CA: McGraw-Hill Osborne Media. - С. 90-91. - ISBN 0-07-146960-5. - "" SEQUEL "був торговою маркою британської авіабудівної групи компаній Hawker Siddeley "
  4. Standardization of SQL - codeidol.com / sql / introduction-to-sql / Introduction to--SQL / Standardization-of-SQL / (Англ.)
  5. Re: Window functions patch v04 for the September commit fest - archives.postgresql.org/pgsql-hackers/2008-09/msg00071.php
  6. Разом з тим стандарт мови специфікацією SQL / PSM передбачає можливість його процедурних розширень.
  7. Стиль програмування Джо Селко на SQL, глава 2 - www.az-design.ru/index.shtml?Support&DataBase&SQL/CelkoJ/020toc
  8. O'Reilly Network - www.oreillynet.com/lpt/a/6060 An Interview with Chris Date
  9. The Third Manifesto - www.thethirdmanifesto.com/

Цей текст може містити помилки.

Схожі роботи | скачати

Схожі роботи:
Having (SQL)
PL / SQL
Rollback (SQL)
Commit (SQL)
Create (SQL)
Intersect (SQL)
Union (SQL)
Join (SQL)
Truncate (SQL)
© Усі права захищені
написати до нас
Рейтинг@Mail.ru