SQL (ˈɛsˈkjuˈɛl) — унівэрсальная кампутарная мова, якая прымяняецца для стварэньня, мадыфікацыі і кіраваньня зьвесткамі ў рэляцыйных базах зьвестак.

SQL заснаваная на рэляцыйнай альгебры.

SQL не зьяўляецца мовай праграмаваньня, а найперш інфармацыйна-лягічнай мовай, прызначанай для апісаньня захоўваемых зьвестак, для іх выманьня і зьмяненьня.

НазваРэдагаваць

Афіцыйна мова называецца SQL (поўная назва Database Language SQL), вымаўляецца як ˈɛsˈkjuˈɛl, і ў такім выглядзе запісаная ў стандарце ANSI. Распаўсюджанае памылковае меркаваньне, што SQL зьяўляецца абрэвіятурай, утворанай ад анг. Structured Query Language («мова структураваных запытаў»). Памылковасьць гэтага погляду пацьвярджаецца тым, што SQL не зьяўляецца структураванай мовай, бо яе нельга разьбіць на блёкі або працэдуры; не абмяжоўваецца выключна запытамі; не зьяўляецца поўнай мовай паводле вызначэньня Т’юрынга[1].

АпэратарыРэдагаваць

Апэратары 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 падзяляе транзакцыю на драбнейшыя кавалкі

ПеравагіРэдагаваць

Незалежнасьць ад канкрэтнай СКБЗРэдагаваць

Нягледзячы на наяўнасьць дыялектаў і адрозьненьняў у сынтаксысу, у пераважнай большасьці тэксты SQL-запытаў, якія зьмяшчаюць DDL і DML, могуць быць дастаткова лёгка перанесеныя з аднае СКБЗ у іншую. Існуюць сыстэмы, распрацоўнікі якіх ад пачатку арыентаваліся на выкарыстаньне прынамсі некалькіх СКБЗ.

Наяўнасьць стандартаўРэдагаваць

Наяўнасьць стандартаў і набору тэстаў для высьвятленьня сумяшчальнасьці і адпаведнасьці канкрэтнае рэалізацыі SQL агульнапрынятаму стандарту толькі спрыяе «стабілізацыі» мовы. Праўда, варта зьвярнуць увагу, што сам па сабе стандарт месцамі занадта фармалізаваны і раздзьмуты (напрыклад, ключавая частка стандарту SQL:2003 зьмяшчае больш за 1300 старонак тексту).

ДэклярацыйнасьцьРэдагаваць

З дапамогаю SQL праграмоўца апісвае толькі тое, якія зьвесткі неабходна выняць ці мадыфікаваць. Тое, якім чынам гэта зрабіць, вырашае СКБЗ непасрэдна пры апрацоўцы SQL-запыту. Аднак ня варта думаць, што гэта цалкам унівэрсальны прынцып — праграмоўца апісвае набор зьвестак для выбаркі ці мадыфікацыі, аднак яму пры гэтым карысна ўяўляць, як СКБЗ будзе разьбіраць тэкст ягонага запыту. Чым больш складана сканструяваны запыт, тым больш ён дапускае варыянтаў напісаньня, адрозных па хуткасьці выкананьня, але аднолькавых па выніковым наборы зьвестак.

НедахопыРэдагаваць

Неадпаведнасьць рэляцыйнай мадэлі зьвестакРэдагаваць

Стваральнікі рэляцыйнай мадэлі зьвестак Эдгар Код, Крыстафэр Дэйт і іхнія прыхільнікі паказваюць на тое, што SQL не зьяўляецца сапраўды рэляцыйнай мовай. У прыватнасьці, яны апісваюць наступныя праблемы SQL[2]:

  • Паўтаральныя радкі
  • Нявызначаныя значэньні (nulls)
  • Яўнае пазначэньне парадку слупкоў зьлева ўправа
  • Слупкі без найменьняў і дубляваныя найменьні слупкоў
  • Адсутнасьць падтрымкі ўласьцівасьці «=»
  • Выкарыстаньне паказальнікаў
  • Высокая празьмернасьць

У апублікаваным Крыстафэрам Дэйтам і Х’ю Дарвэнам Трэцім маніфэсьце[3] яны выкладаюць прынцыпы СКБЗ наступнага пакаленьня і прапануюць мову Tutorial D, якая зьяўляецца сапраўды рэляцыйнай.

СкладанасьцьРэдагаваць

Хоць SQL быў задуманы як сродак працы канчатковага карыстальніка, у рэшце рэшт ён стаў настолькі складаны, што ператварыўся ў інструмэнт праграмоўцы.

Адыход ад стандартаўРэдагаваць

Нягледзячы на наяўнасьць міжнароднага стандарту ANSI SQL-92, многія кампаніі, што займаюцца распрацоўкай СКБЗ (напрыклад, Oracle, Sybase, Microsoft, MySQL AB, уносяць зьмены ў мову SQL. Такім чынам, зьяўляюцца спэцыфічныя для кожнай канкрэтнай СКБЗ дыялекты мовы SQL.

Цяжкасьць працы з герархічнымі структураміРэдагаваць

Раней дыялекты SQL большасьці СКБЗ не прапаноўвалі спосабу маніпуляцыі дрэвападобнымі структурамі. Некаторыя пастаўшчыкі СКБЗ прапаноўвалі свае рашэньні (напрыклад, Oracle ужывае выраз CONNECT BY). У цяперашні час у ANSI стандартызаваная рэкурсыўная канструкцыя WITH з дыялекту SQL DB2. У Microsoft SQL Server рэкурсыўныя запыты зьявіліся толькі ў вэрсіі MS SQL Server 2005. У вэрсіі MS SQL Server 2008 зьявіўся новы тып зьвестак — hierarchyid, які спрашчае маніпуляваньне дрэвападобнымі структурами.

Глядзіце таксамаРэдагаваць

Крыніцы і заўвагіРэдагаваць

  1. ^ Chris Fehily. SQL. Peachpit press, 2003 // Крис Фиайли. SQL. ДМК Пресс, 2004. ISBN 5-94074-233-5
  2. ^ An Interview with Chris Date(анг.). O’Reilly Network
  3. ^ The Third Manifesto

ЛітаратураРэдагаваць

  • Бен Форта. Освой самостоятельно язык запросов SQL / Пер. с англ. — 3-е изд. — М.: Диалектика, 2005. — 288 с.
  • Пол Уилтон, Джон Колби. Язык запросов SQL для начинающих / Пер. с англ. — М.: Диалектика, 2005. — 496 с.
  • К. Дж. Дейт. Введение в системы баз данных / Пер. с англ. — 8-е изд. — М.: Вильямс, 2005. — 1328 с.
  • Кевин Клайн. SQL. Справочник. — М.: Кудиц-Образ, 2006. — 832 с.