Structured Query Language

Structured Query Language (SQL; iné názvy: štruktúrovaný vyhľadávací jazyk, štruktúrovaný dopytovací jazyk, nespisovne štruktúrovaný dotazovací jazyk) je počítačový jazyk na manipuláciu (DML) (výber, vkladanie, úpravu a mazanie) a definíciu údajov (DDL). V súčasnosti je to najpoužívanejší jazyk tohto druhu v relačných systémoch riadenia databáz.

Jazyk SQL sa vyvinul pôvodne z jazyka SEQUEL, čo bol jazyk pre manipuláciu a definíciu dát pre System R od IBM, prvého databázového systému založenom na Coddovom relačnom dátovom modeli. Prvý komerčný databázový systém využívajúci SQL vyvinula spoločnosť Relational Software, Inc. (teraz Oracle) v roku 1979. Jazyk SQL sa stal čoskoro štandardnou výbavou väčšiny relačných databázových systémov.

V roku 1986 inštitúcia ANSI štandardizovala jazyk SQL pod označením SQL-86. O rok neskôr vo viac-menej nezmenenej forme tento štandard ratifikovala aj organizácia ISO (SQL-87). V roku 1989 a 1992 boli prijaté revízie označené ako SQL-89, resp. SQL-92 (aj SQL-2). Výrazné zmeny prišli v roku 1999, kedy sa do štandardu SQL:1999 (SQL-3) dostali napr. rekurzívne dopyty, spúšťače (triggery), regulárne výrazy, neskalárne dátové typy a niektoré objektovo-orientované vlastnosti. Verzia SQL:2003 priniesla hlavne podporu pre XML, štandardizované postupnosti, stĺpce s automaticky generovanými hodnotami a tzv. oknové funkcie.

Norma SQL-86 definuje výslovnosť slova SQL v anglickom jazyku ako „eskjúel“, hoci mnoho ľudí ho vyslovuje stále ako „síkl“ (SEQUEL). V slovenskom jazyku sa okrem týchto dvoch cudzích výslovností používa prirodzené „eskvéel“.

Základné syntaktické konštrukcie jazyka SQL sú nasledovné:
 manipulácia dát (DML príkazy)
 SELECT je ďaleko najčastejšie používaný príkaz a slúži pre vytváranie dopytov (výber dát). Dáta umožňuje vyberať z rôznych spojení (napr. prirodzené spojenie, vonkajšie spojenie, karteziánsky súčin) tabuliek, pohľadov a tabuľkových funkcií. V klauzule WHERE je možné definovať podmienky pre výstupné riadky. Tento príkaz plní aj agregačnú a zoskupovaciu funkciu (klauzula GROUP BY). Výstupné dáta môžu byť podľa želenia utriedené (ORDER BY). Príkaz SELECT vyberá dáta deklaratívnym spôsobom z koncepčnej alebo pohľadovej úrovne, nikdy nie z fyzickej.
 INSERT umožňuje vloženie nových dát do tabuľky.
 DELETE slúži na vymazanie dát z tabuľky.
 UPDATE upravuje existujúce dáta v tabuľke.
 MERGE kombinácia príkazov INSERT/UPDATE, definovaná štandardom SQL:2003. Dáta sa alebo vložia, alebo upravia, v závislosti na definovanej podmienke
 transakčné príkazy obaľujú DML príkazy, prevedú databázu z jedného konzistentného stavu do druhého
 START TRANSACTION, (alebo BEGIN TRANSACTION, BEGIN WORK) označuje začiatok transakcie, pokiaľ sa zmeny nepotvrdia, iní užívatelia ich neuvidia
 SAVE TRANSACTION uloženie aktuálneho stavu transakcie
 COMMIT potvrdenie zmien vykonaných v transakcii a ich trvalé uloženie do databázy
 ROLLBACK vrátenie prevedených zmien do stavu pred vykonaním transakcie, alebo do stavu pred posledným uložením transakcie
 definícia dát (DDL príkazy)
 CREATE vytvára nové databázové objekty (databázy, tabuľky, pohľady, funkcie a pod.),
 ALTER upravuje databázové objekty (napr. pridáva stĺpce do existujúcej tabuľky),
 DROP ruší databázové objekty.
 niekedy sa hovorí aj o tzv. riadení dát (data control language)
 GRANT prideľuje používateľom, skupinám a roliam práva na vykonanie rôznych operácií nad dátami,
 REVOKE odoberá práva.

Časť, ktorá slúži na manipuláciu s dátami, je vo svojej podstate len syntaktický cukor pre relačný kalkul.

V čistej forme (štandard) nie je jazyk SQL turingovsky úplný, tzn. nevieme v ňom vypočítať všetko, čo vieme na Turingovom stroji (a teda aj naprogramovať v bežných programovacích jazykoch). V SQL nedokážeme napríklad urobiť tranzitívny uzáver relácie]. Z tohto dôvodu mnohé databázové systémy rozširujú jazyk SQL o ďalšie konštrukcie, napr. Oracle dodáva PL/SQL, Microsoft SQL Server používa T-SQL. Iný prístup spočíva v integrácii niektorého klasického programovacieho jazyka, napr. Oracle podporuje jazyk Java, Microsoft SQL Server 2005 ľubovoľný jazyk podporujúci .NET (napr. C#, VB.NET či C++), v PostgreSQL môžu byť funkcie písané v rôznych jazykoch ako je Perl, Tcl či C.

Rozšírenia

Procedurálne rozšírenia 
SQL je navrhnuté na špecifický účel: vyhľadávať údaje v relačnej databáze. SQL je nastaviteľný, deklaratívny jazyk, nie prikazovací ako C alebo BASIC. Napriek tomu existujú rozšírenia základného SQL, ktoré dopĺňajú funkcie procedurálneho programovacieho jazyka, ako napríklad konštrukcia kontrola-za-behu. Tu sú:

Na doplnenie štandardných SQL/PSM rozšírení a súkromných (patentovaných?) SQL rozšírení, je na veľa SQL platformách pomocou DBMS integrácie s inými jazykmi umožnené procedurálne a objektovo-orientované programovanie. SQL štandardy definujú SQL/JRT rozšírenia (SQL programy a typy(?) pre programovací jazyk Java) na podporu kódu Java v SQL databázach. SQL Server 2005 používa SQLCLR ( spoločný jazyk pre SQL Servery) na riadenie(?) klienta. NET vyhľadáva v databáze, kým predchádzajúce verzie SQL Server nepodporovali neriadené(?) rozširovacie funkcie, primárne napísané v C. Ďalšie databázové platformy, ako MySQL a Postgres, umožňujú písanie funkcií v širokom spektre jazykov, ako: Perl, Python, TCL a C.

Ďalšie rozšírenia 
SQL: 2003 tiež definuje niekoľko ďalších rozšírení k štandardu zväčšiť SQL celkovú funkčnosť. Tieto rozšírenia obsahujú:

 SQL/CLI, alebo volacie rozhranie, rozšírenie je definované v ISO/IEC 9075-3: 2003. Toto rozšírenie definuje obyčajné prepojovacie komponenty (štruktúry a procedúry), ktoré môžu byť použité na spracovanie SQL formulácii z aplikácii písaných v iných programovacích jazykoch. SQL/CLI rozšírenie je definované v takej ceste že SQL formulácie a SQL/CLI procedurálne volania su spracované ako !!!separate!!! z volacieho aplikačného zdrojového kódu.

 SQL/MED, alebo vedenie externých dát, rozšírenie je definované ISO/IEC 9075-9: 2003. SQL/MED poskytuje rozšírenie ku SQL, ktoré vymedzuje cudzie-dátové obaly a datalinkové typy k povoleniu SQL riadiť externé dáta. Externé dáta sú dáta, ktoré sú dostupné , ale nie riadené, SQL-based? DBMS.

 SQL/OLB, alebo Objektové jazykové viazanie, rozšírenie je definované ISO/IEC 9075-10: 2003. SQL/OLB definuje syntax a !!symantics!! SQLJ, ktorý je SQL vložený v Jave. Štandard taktiež popisuje mechanizmy na zaistenie binárnej prenositeľnosti SQLJ aplikácii, a špecifikuje rôzne java balíčky a ich obsahované triedy.

 SQL/Schemata, alebo Informovanosť a definícia schémat, rozšírenie je definované ISO/IEC 9075-11: 2003. SQL/schémata definujú informačné schéma a definujúce schéma, poskytujúce obyčajný súbor nástrojov robiť SQL databázy a objekty samo-popisovateľné. Tieto nástroje zahrnujú SQL objektový identifikátor, štruktúru a integritné zabezpečenia, bezpečnosť a autorizačné špecifikácie, funkcie a balíčky ISO/IEC 9075, podpora funkcií poskytované SQL-based DBMS implementácií, SQL-based DBMS implementačné informácie a formátovacie prvky?? a hodnoty podporované DBMS implementáciami.

SQL/JRT, alebo SQL rutiny a typy pre java programovací jazyk, rozšírenie je definované ISO/IEC 9075-13: 2003. SQL/JRT špecifikuje schopnosť sa odvolať na statické java metódy ako rutiny vo vnútri SQL aplikácii. To taktiež volá po schopnosti používať java triedy ako SQL usporiadané užívateľské definované typy.

 SQL/XML, alebo XML-príbuzné špecifikácie, rozšírenie je definované ISO/IEC 9075-14: 2003. SQL/XML špecifikuje SQL-based rozšírenie na používanie spojenia s SQL. XML dátový typ je predstavený, rovnako ako niekoľko rutín, funkcií, a XML-to-SQL dátový typ mapujúci na podporu manipulácie a ukladania XML v SQL databáze.

SQL/PSM, alebo Trvalo uložené moduly, rozšírenie je definované ISO/IEC 9075-4: 2003. SQL/PSM normalizuje procedurálne rozšírenie pre SQL, obsahujúci prúd kontroly, !!!condition!!! manipuláciu, príkaz !!condition!! signálov a !!resignals!!, kurzorov a lokálnych premenných a dosadzovanie výrazov do premenným a parametrov. Navyše, SQL/PSM formuje deklaráciu a udržovanie trvalých databázových jazykových rutín (napr., “uložené procedúry”).

Jazykové prvky 
Jazyk SQL sa skladá z niekoľkých jazykových prvkov, zahŕňajúc:

 Príkazy – môžu mať trvalý dopad na schémy a údaje, alebo ktoré môžu kontrolovať protokoly, toky programov, pripojenia, spojenia, diagnózu.

 Vyhľadávanie – ktoré vyberajú údaje podľa špecifických kritérií
 Výrazy – ktoré môžu zobrazovať skalárne veličiny, alebo tabuľky, pozostávajúce z údajov v riadkoch a stĺpcoch
 Premenné – ktoré špecifikujú podmienky, ktoré môžu stanoviť SQL trojhodnotovú logiku (3VL) Boolean-ovskej pravdivých hodnôt, ktoré sú používané na limitovanie účinkov príkazov a vyhľadávania, alebo na zmeny tokov programov. 

 
Programovacie jazyky
Databázové systémy