Movatterモバイル変換


[0]ホーム

URL:


Перейти до вмісту
Вікіпедія
Пошук

SQL

Матеріал з Вікіпедії — вільної енциклопедії.
SQL
Парадигмамульти-парадигмовий
Дата появи1974
ТворціДональд Чамберлін таРаймонд Бойс
РозробникIBM
Останній релізSQL:2016 (2016)
Система типізаціїстрога статична типізація
Основні реалізаціїбагато
ДіалектиSQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003, SQL:2006, SQL:2008[1], SQL:2011, SQL:2016.
Під впливом відDatalog
Вплинула наCQL,LINQ,Windows PowerShell
Операційна системакрос-платформова
Звичайні розширення файлів.sql Редагувати інформацію у Вікіданих
Вебсайтiso.org/standard/76583.html Редагувати інформацію у Вікіданих

SQL (/ˌɛsˌkjuːˈɛl/ або інколи/ˈsiːkwəl/ "сіквел",англ.Structured query language — мова структурованих запитів) —декларативна мова програмування для взаємодії користувача збазами даних, що застосовується для формування запитів, оновлення і керуванняреляційними БД, створення схеми бази даних та її модифікації, системи контролю за доступом до бази даних. Сама по собі SQL не є ані системою керування базами даних, ані окремим програмним продуктом. На відміну від дійсних мов програмування (C абоPascal), SQL може формувати інтерактивні запити або, бувши вбудованою в прикладні програми, виступати як інструкції для керування даними. Окрім цього, стандарт SQL містить функції для визначення зміни, перевірки та захисту даних.

SQL — це діалогова мова програмування для здійсненнязапиту і внесення змін до бази даних, а також керування базами даних. Багато баз даних підтримує SQL з розширеннями до стандартної мови. Ядро SQL формує командна мова, яка дозволяє здійснювати пошук, вставку, оновлення і вилучення даних за допомогою використання системи керування і адміністративних функцій. SQL також включає CLI (Call Level Interface) для доступу і керування базами даних дистанційно.

Основу бази даних SQL Server утворює сервер або ядро бази даних.[джерело?]Ядро бази даних відповідає за обробку запитів, які надходять від клієнтів, і передачу відповідних результатів клієнтським компонентам.[джерело?]

Перша версія SQL була розроблена на початку 1970-х років уIBM. Ця версія мала назвуSEQUEL і була призначена для обробки та пошуку даних, що містилися в реляційній базі даних IBM,System R. Мова SQL надалі була стандартизована Американськими Держстандартами (ANSI) в 1986.На початку SQL була запланована як мова запитів і управління даними, а пізніші модифікації SQL створені продавцями системи управління базами даних, які додали процедурні конструкції,control-of-flow команд і темпоральні розширення мов. З випуском стандарту SQL:1999 такі розширення були формально запозичені як частина мови SQL черезPersistent Stored Modules (SQL/PSM).

Критика SQL включає відсутністькрос-платформенності, невідповідну обробку відсутніх даних (дивітьсяNull (SQL)). Часто це неоднозначнаграматика ісемантика мови.

Історія

[ред. |ред. код]

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

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

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

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

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

Стандарти

[ред. |ред. код]

Повністю історія версій стандартів-ревізій SQL:

РікНазваІнша назваКоментар
1986SQL-86SQL-87Вперше оприлюдненоANSI. РатифікованоISO в1987.
1989SQL-89FIPS 127-1Незначні зміни.
1992SQL-92SQL2Вагомі зміни.
1999SQL:1999SQL3Доданорегулярні вирази, рекурсивні запити, тригери та деякіоб'єктно-орієнтовані нововведення.
2003SQL:2003SQL 2003Впроваджені розширення для роботи зXML-даними.
2006SQL:2006SQL 2006ISO/IEC 9075-14:2006. Функціональність роботи з XML-даними значно розширено. З'явилась можливість сумісного використання в SQL таXQuery.
2008SQL:2008SQL 2008Вдосконалені можливостівіконних функцій, усунуто деякі неоднозначності стандарту SQL:2003. Легалізовано ORDER BY поза визначенням курсору. Додано тригери INSTEAD OF. Додано заяви TRUNCATE.
2011SQL:2011SQL 2011Додає часові дані (PERIOD FOR) (додаткова інформація у:Тимчасова база даних#Історія). Покращення функцій вікон та пропозиції FETCH.
2016SQL:2016SQL 2016Додає рядки підрівнювання посилань, поліморфні функції таблиці, JSON.

Синтаксис

[ред. |ред. код]
Докладніше:Синтаксис SQL

Мова SQL поділяється на кілька видів елементів:

  • Пункти (диз'юнкти) (англ.Clauses), що є складовими частинами інструкцій та запитів. (Іноді вони не обов'язкові.)[3]
  • Вирази (англ.Expressions), які можуть генеруватискалярні значення, аботаблиці зстовпчиками ірядками даних
  • Предикати (англ.Predicates), які описують умови, результатом яких є значеннятризначної логіки SQL (true/false/unknown) абоБулевізначення істинності і які використовуються для обмеження ефекту інструкцій та запитів, або для зміни потоку виконання програми.
  • Запити (англ.Queries), які отримують дані на основі заданих критеріїв.
  • Інструкції (англ.Statements), які чинять дію на схему даних чи самі дані, або контролюютьтранзакції, потік виконання програми, з'єднання, сесії, та виконують діагностику.
    • Інструкції SQL також включаютькрапку з комою («;») для позначення кінця інструкції. Хоча вона не є обов'язковою на кожній платформі, вона описується як стандартна частина граматики SQL.
  • Незначимі пропуски загалом ігноруються в інструкціях і запитах SQL, дозволяючи форматувати код SQL з метою покращеннячитабельності.

Структура SQL

[ред. |ред. код]

SQL (Structured query language — мова структурованих запитів), складається з:

Data Definition Language

[ред. |ред. код]
Докладніше:DDL
  • CREATE — створення об'єкта (наприклад, таблиці);
  • ALTER — зміна об'єкта (наприклад, додавання/зміна полів таблиці);
  • DROP — видалення об'єкта.

Data Manipulation Language

[ред. |ред. код]
Докладніше:DML
  • INSERT — вставлення рядочка;
  • SELECT — вибірка;
  • UPDATE — зміна;
  • DELETE — видалення.

Data Control Language

[ред. |ред. код]
Докладніше:DCL
  • GRANT — надання прав користувачу;
  • DENY — явна заборона для користувача;
  • REVOKE — скасування заборони/дозволу користувачу.

Transaction Control Language

[ред. |ред. код]
Докладніше:Transaction Control Language
  • BEGIN TRANSACTION — почати транзакцію;
  • COMMIT — прийняти зміни прийняті в транзакції;
  • ROLLBACK — відкат.

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

[ред. |ред. код]

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

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

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

  • Entry (базовий)
  • Transitional (перехідний) — перевірку на відповідність цьому рівню проводив тільки інститут NIST
  • Intermediate (проміжний)
  • Full (повний)

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

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

Переваги

[ред. |ред. код]

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

[ред. |ред. код]

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

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

[ред. |ред. код]

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

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

[ред. |ред. код]

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

Недоліки

[ред. |ред. код]

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

[ред. |ред. код]

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

  • Рядки, що повторюються
  • Невизначені значення (null)
  • Явна вказівка порядку стовпчиків зліва направо
  • Стовпчики без імені та імена стовпчиків, що повторюються
  • Відсутність підтримки властивості «=»
  • Використання вказівників
  • Значна надлишковість

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

Складність

[ред. |ред. код]

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

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

[ред. |ред. код]

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

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

[ред. |ред. код]

Раніше SQL не пропонувала стандартного способу маніпуляції деревоподібними структурами. Деякі постачальники СУБД запропонували свої рішення. Для прикладу, Oracle використовує вираз CONNECT BY. В наш час[коли?] як стандарт прийнята рекурсивна конструкція WITH.

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

[ред. |ред. код]

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

СУБДКоротка назваРозшифрування
Borland InterBase/
Firebird
PSQLProcedural SQL
IBM DB2SQL PLSQL Procedural Language (розширює SQL/PSM)
Microsoft SQL Server/
Sybase ASE
Transact-SQLTransact-SQL
MySQLSQL/PSMSQL/Persistent Stored Module
OraclePL/SQLProcedural Language/SQL (заснований на мовіAda)
PostgreSQLPL/pgSQLProcedural Language/PostgreSQL Structured Query Language (схожий на Oracle PL/SQL)

Простий приклад

[ред. |ред. код]

Простий запит для виведення списку із атрибутами Name та Address із таблиці School у певній базі даних має такий вигляд:

SELECTName,AddressFROMSchool;

Примітки

[ред. |ред. код]
  1. Архівована копія. Архіворигіналу за 11 січня 2009. Процитовано 31 грудня 2008.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
  2. «„SEQUEL“ був торговою маркою британської авіабудівної групи компанійHawker Siddeley» //Andy Oppel.Databases Demystified. — San Francisco, CA : McGraw-Hill Osborne Media. — С. 90—91. —ISBN 0-07-225364-9.
  3. ANSI/ISO/IEC International Standard (IS).
  4. O'Reilly Network.[Архівовано 3 травня 2007 уWayback Machine.] An Interview with Chris Date
  5. The Third Manifesto. Архіворигіналу за 19 грудня 2008. Процитовано 31 грудня 2008.

Див. також

[ред. |ред. код]
SQL
у сестринських Вікіпроєктах


Мова програмуванняЦе незавершена стаття промови програмування.
Ви можетедопомогти проєкту,виправивши або дописавши її.
Версії
Ключові слова
Пов'язані статті
Частини ISO/IEC SQL
Рівень
Низькорівневі
Високорівневі
Загального
призначення
Серверні
Запитів до баз
даних[суперечливо 1]
Розмітки тавекторної
графіки
[суперечливо 1]
Синхронні
Символьних та
чисельних обчислень
Квантових обчислень
Логічні
Академічні
Езотеричні
  1. абНемає загальноприйнятого рішення, чи вважати усі ці мови саме мовами програмування
Зараз використовуються
Власницькі
Витіснені
Отримано зhttps://uk.wikipedia.org/w/index.php?title=SQL&oldid=45882268
Категорії:
Приховані категорії:

[8]ページ先頭

©2009-2026 Movatter.jp