SQL
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), офіційною вимовою стало [,es kju:' el] — ес-к'ю-ел. Попри це, навіть англомовні фахівці по традиції часто називають SQL «сіквел», замість «ес-кью-ел». Метою розробки було створення простої непроцедурної мови, якою зміг би скористатися будь-який користувач, що навіть не має навичок програмування. Власне розробкою мови запитів займалися Дональд Чемберлін (Donald D. Chamberlin) та Рей Бойс (Ray Boyce). Пет Селінджер (Pat Selinger) займалася розробкою вартісного оптимізатора (англ. cost-based optimizer), Реймонд Лорі (Raymond Lorie) займався компілятором запитів. Варто зазначити, що SEQUEL не була єдиною мовою подібного призначення. У Каліфорнійському університеті в Берклі була розроблена некомерційна СУБД Ingres (що була, між іншим, дальнім прародичем популярної зараз некомерційної СУБД PostgreSQL), яка була реляційною СУБД, але використовувала свою власну мову QUEL, яка, проте, не витримала конкуренції за кількістю СУБД, що підтримували її, з мовою SQL. Першими СУБД, що підтримують нову мову SQL (з 1979 року), стали Oracle V2 для машин VAX від компанії Relational Software Inc. (що згодом стала компанією Oracle) і System/38 від IBM, заснована на System/R. Перший офіційний стандарт мови SQL був прийнятий ANSI в 1986 і ISO (Міжнародною організацією зі стандартизації) в 1987 (так званий SQL-86), який був уточнений в 1989 році. Наступний розвиток мови постачальниками СУБД зажадав ухвалення в 1992 році нового розширеного стандарту (ANSI SQL-92, або просто SQL2), в якому були визначені спеціальні темпоральні розширення в стандарті SQL. Наступним стандартом став SQL:1999 (SQL3). В наш час[коли?], діє стандарт, який був прийнятий у 2003 році (SQL:2003), а надалі зазнав незначних модифікацій. СтандартиПовністю історія версій стандартів-ревізій SQL:
СинтаксисМова SQL поділяється на кілька видів елементів:
Структура SQLSQL (Structured query language — мова структурованих запитів), складається з:
Data Definition Language
Data Manipulation LanguageData Control Language
Transaction Control Language
Питання сумісностіЯк і з багатьма стандартами в IT-індустрії, з мовою SQL виникла проблема: багато розробників ПЗ вирішили, що функціональність стандартної версії недостатня (що, в принципі, для ранніх версій SQL було певною мірою справедливо) і їх бажанням стало її розширення. Це призвело до того, що у різних виробників СУБД застосовуються різні діалекти SQL, здебільшого несумісні між собою. До 1996 року питаннями відповідності комерційних реалізацій SQL стандарту займався переважно інститут NIST, який і встановлював рівень відповідності стандарту. Відтоді, як останній підрозділ, що займався СУБД, був розформований, всі зусилля з перевірки СУБД на відповідність стандарту були покладені на її виробника. Вперше поняття «Рівня відповідності» було запропоноване в стандарті SQL-92. ANSI і NIST визначали чотири рівні відповідності реалізації цьому стандарту:
Легко можна зрозуміти, що кожен наступний рівень відповідності свідомо передбачав відповідність попередньому рівню. Далі, згідно з цими рівнями стандартів, будь-яка СУБД, що відповідала рівню 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]:
В опублікованому Крістофером Дейтом і Г'ю Дарвеном Третьому маніфесті[5], вони декларували принципи СУБД наступного покоління та пропонували мову Tutorial D, яка є справді реляційною. СкладністьХоча мову SQL було початково заплановано як засіб роботи кінцевого користувача, урешті-решт вона стала настільки складною, що перетворилася на інструмент програміста. Відхилення від стандартівПопри існування міжнародного стандарту ANSI (SQL-92, SQL:1999 та подальші версії), багато компаній, що розробляють СУБД (наприклад, Oracle, Sybase, Microsoft, MySQL), вносять свої зміни до мови SQL, що застосовується в розроблених ними СУБД. Цим вони створюють передумови відхилення від стандартів. Тож у кожній конкретній СУБД застосовуються специфічні діалекти мови SQL. Складність роботи з ієрархічними структурамиРаніше SQL не пропонувала стандартного способу маніпуляції деревоподібними структурами. Деякі постачальники СУБД запропонували свої рішення. Для прикладу, Oracle використовує вираз CONNECT BY. В наш час[коли?] як стандарт прийнята рекурсивна конструкція WITH. Процедурні розширенняОскільки SQL не є мовою програмування (тобто не надає засобів для автоматизації операцій з даними), нововведення різних виробників стосувалися в першу чергу процедурних розширень. Це збережені процедури (англ. stored procedures) і процедурні мови — «надбудови». Практично в кожній СУБД застосовується своя процедурна мова. Подібні мови для найпопулярніших СУБД приведені в наступній таблиці.
Простий прикладПростий запит для виведення списку із атрибутами Name та Address із таблиці School у певній базі даних має такий вигляд: SELECT Name, Address
FROM School;
Примітки
Див. також
|
Portal di Ensiklopedia Dunia