SQL
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, які спрашчае маніпуляваньне дрэвападобнымі структурами.
Глядзіце таксама
рэдагавацьКрыніцы і заўвагі
рэдагаваць- ^ Chris Fehily. SQL. Peachpit press, 2003 // Крис Фиайли. SQL. ДМК Пресс, 2004. ISBN 5-94074-233-5
- ^ An Interview with Chris Date (анг.). O’Reilly Network
- ^ The Third Manifesto
Літаратура
рэдагаваць- Бен Форта. Освой самостоятельно язык запросов SQL / Пер. с англ. — 3-е изд. — М.: Диалектика, 2005. — 288 с.
- Пол Уилтон, Джон Колби. Язык запросов SQL для начинающих / Пер. с англ. — М.: Диалектика, 2005. — 496 с.
- К. Дж. Дейт. Введение в системы баз данных / Пер. с англ. — 8-е изд. — М.: Вильямс, 2005. — 1328 с.
- Кевин Клайн. SQL. Справочник. — М.: Кудиц-Образ, 2006. — 832 с.