SQL

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

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

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

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

## Апэратары
Апэратары SQL падзяляюцца на:
* апэратары вызначэньня зьвестак ()
** **CREATE** стварае аб’ект БЗ (саму базу, табліцу, уяўленьне, карыстальніка і да т. п.)
** **ALTER** зьмяняе аб’ект
** **DROP** выдаляе аб’ект
* апэратары маніпуляваньня зьвесткамі ()
** **SELECT** чытае зьвесткі, якія адпавядаюць зададзеным умовам
** **INSERT** дадае новыя зьвесткі
** **UPDATE** зьмяняе існыя зьвесткі
** **DELETE** выдаляе зьвесткі
* апэратары вызначэньня доступу да зьвестак ()
** **GRANT** прадастаўляе карыстальніку або групе дазвол на пэўныя апэрацыі з аб’ектам
** **REVOKE** адклікае раней выдадзеныя дазволы
** **DENY** задае забарону, якая мае прыярытэт над дазволам
* апэратары кіраваньня транзакцыямі ()
** **COMMIT** прымяняе транзакцыю
** **ROLLBACK** скасоўвае ўсе зьмяненьні, якія былі зробленыя ў кантэксьце цяперашняй транзакцыі
** **SAVEPOINT** падзяляе транзакцыю на драбнейшыя кавалкі

## Перавагі

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

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

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

## Недахопы

### Неадпаведнасьць рэляцыйнай мадэлі зьвестак
Стваральнікі рэляцыйнай мадэлі зьвестак Эдгар Код, Крыстафэр Дэйт і іхнія прыхільнікі паказваюць на тое, што SQL не зьяўляецца сапраўды рэляцыйнай мовай. У прыватнасьці, яны апісваюць наступныя праблемы SQL:
* Паўтаральныя радкі
* Нявызначаныя значэньні (nulls)
* Яўнае пазначэньне парадку слупкоў зьлева ўправа
* Слупкі без найменьняў і дубляваныя найменьні слупкоў
* Адсутнасьць падтрымкі ўласьцівасьці «=»
* Выкарыстаньне паказальнікаў
* Высокая празьмернасьць
У апублікаваным Крыстафэрам Дэйтам і Х’ю Дарвэнам Трэцім маніфэсьце яны выкладаюць прынцыпы СКБЗ наступнага пакаленьня і прапануюць мову 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, які спрашчае маніпуляваньне дрэвападобнымі структурами.

## Глядзіце таксама
* Рэляцыйная сыстэма кіраваньня базамі зьвестак

## Крыніцы і заўвагі

## Літаратура
* 
* 
* 
* 

Катэгорыя:Мовы запытаў
9075
Катэгорыя:Сыстэмы кіраваньня базамі зьвестак