SQL (ˈɛsˈkjuˈɛl) — унівэрсальная кампутарная мова, якая прымяняецца для стварэньня, мадыфікацыі і кіраваньня зьвесткамі ў рэляцыйных базах зьвестак.
SQL заснаваная на рэляцыйнай альгебры.
SQL не зьяўляецца мовай праграмаваньня, а найперш інфармацыйна-лягічнай мовай, прызначанай для апісаньня захоўваемых зьвестак, для іх выманьня і зьмяненьня.
Афіцыйна мова называецца SQL (поўная назва Database Language SQL), вымаўляецца як ˈɛsˈkjuˈɛl, і ў такім выглядзе запісаная ў стандарце ANSI. Распаўсюджанае памылковае меркаваньне, што SQL зьяўляецца абрэвіятурай, утворанай ад анг. Structured Query Language («мова структураваных запытаў»). Памылковасьць гэтага погляду пацьвярджаецца тым, што SQL не зьяўляецца структураванай мовай, бо яе нельга разьбіць на блёкі або працэдуры; не абмяжоўваецца выключна запытамі; не зьяўляецца поўнай мовай паводле вызначэньня Т’юрынга[1].
Апэратары SQL падзяляюцца на:
Нягледзячы на наяўнасьць дыялектаў і адрозьненьняў у сынтаксысу, у пераважнай большасьці тэксты SQL-запытаў, якія зьмяшчаюць DDL і DML, могуць быць дастаткова лёгка перанесеныя з аднае СКБЗ у іншую. Існуюць сыстэмы, распрацоўнікі якіх ад пачатку арыентаваліся на выкарыстаньне прынамсі некалькіх СКБЗ.
Наяўнасьць стандартаў і набору тэстаў для высьвятленьня сумяшчальнасьці і адпаведнасьці канкрэтнае рэалізацыі SQL агульнапрынятаму стандарту толькі спрыяе «стабілізацыі» мовы. Праўда, варта зьвярнуць увагу, што сам па сабе стандарт месцамі занадта фармалізаваны і раздзьмуты (напрыклад, ключавая частка стандарту SQL:2003 зьмяшчае больш за 1300 старонак тексту).
З дапамогаю SQL праграмоўца апісвае толькі тое, якія зьвесткі неабходна выняць ці мадыфікаваць. Тое, якім чынам гэта зрабіць, вырашае СКБЗ непасрэдна пры апрацоўцы SQL-запыту. Аднак ня варта думаць, што гэта цалкам унівэрсальны прынцып — праграмоўца апісвае набор зьвестак для выбаркі ці мадыфікацыі, аднак яму пры гэтым карысна ўяўляць, як СКБЗ будзе разьбіраць тэкст ягонага запыту. Чым больш складана сканструяваны запыт, тым больш ён дапускае варыянтаў напісаньня, адрозных па хуткасьці выкананьня, але аднолькавых па выніковым наборы зьвестак.
Стваральнікі рэляцыйнай мадэлі зьвестак Эдгар Код, Крыстафэр Дэйт і іхнія прыхільнікі паказваюць на тое, што SQL не зьяўляецца сапраўды рэляцыйнай мовай. У прыватнасьці, яны апісваюць наступныя праблемы SQL[2]:
У апублікаваным Крыстафэрам Дэйтам і Х’ю Дарвэнам Трэцім маніфэсьце[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, які спрашчае маніпуляваньне дрэвападобнымі структурами.