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).[1] V súčasnosti je to najpoužívanejší jazyk tohto druhu v relačných systémoch riadenia databáz.[1]
História
[upraviť | upraviť zdroj]Jazyk SQL sa vyvinul pôvodne z jazyka SEQUEL (Structured English Query Language), č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.[2][1] 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.[1]
V roku 1986 inštitúcia ANSI štandardizovala jazyk SQL pod označením SQL-86.[1] O rok neskôr vo viac-menej nezmenenej forme tento štandard ratifikovala aj organizácia ISO (SQL-87).[1] 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.[3] Verzia SQL:2003 priniesla hlavne podporu pre XML, štandardizované postupnosti, stĺpce s automaticky generovanými hodnotami a tzv. oknové funkcie.[4]
Norma SQL-86 definuje výslovnosť slova SQL v anglickom jazyku ako „eskjúel“, hoci mnoho ľudí ho vyslovuje stále ako „síkuel“ (SEQUEL). V slovenskom jazyku sa okrem týchto dvoch cudzích výslovností používa prirodzené „eskvéel“.
Syntatické konštrukcie
[upraviť | upraviť zdroj]Základné syntaktické konštrukcie jazyka SQL sú nasledovné:
- manipulácia dát (DML príkazy)
SELECTje ďaleko najčastejšie používaný príkaz a slúži pre vytváranie dopytov (výber dát).[5] 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í.[5] V klauzuleWHEREje možné definovať podmienky pre výstupné riadky.[5] Tento príkaz plní aj agregačnú a zoskupovaciu funkciu (klauzulaGROUP BY).[5] Výstupné dáta môžu byť podľa želenia utriedené (ORDER BY).[5] PríkazSELECTvyberá dáta deklaratívnym spôsobom z koncepčnej alebo pohľadovej úrovne, nikdy nie z fyzickej.INSERTumožňuje vloženie nových dát do tabuľky.[6]DELETEslúži na vymazanie dát z tabuľky.[6]UPDATEupravuje existujúce dáta v tabuľke.[6]MERGEkombinácia príkazov INSERT/UPDATE, definovaná štandardom SQL:2003.[4] Dáta sa alebo vložia, alebo upravia, v závislosti na definovanej podmienke[7]
- transakčné príkazy obaľujú DML príkazy, prevedú databázu z jedného konzistentného stavu do druhého[8]
START TRANSACTION, (alebo BEGIN TRANSACTION, BEGIN WORK) označuje začiatok transakcie, pokiaľ sa zmeny nepotvrdia, iní užívatelia ich neuvidia[8]SAVE TRANSACTIONuloženie aktuálneho stavu transakcie[9]COMMITpotvrdenie zmien vykonaných v transakcii a ich trvalé uloženie do databázy[6]ROLLBACKvrátenie prevedených zmien do stavu pred vykonaním transakcie, alebo do stavu pred posledným uložením transakcie[6]
- definícia dát (DDL príkazy)
- niekedy sa hovorí aj o tzv. riadení dát (data control language)[1]
Č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.[1] 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.[10][11][12]
Rozšírenia
[upraviť | upraviť zdroj]Procedurálne rozšírenia
[upraviť | upraviť zdroj]SQL je navrhnuté na špecifický účel: vyhľadávať údaje v relačnej databáze.[1] SQL je nastaviteľný, deklaratívny jazyk, nie prikazovací ako C alebo BASIC.[1] 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.[13] Tu sú:
| Source | Common Name |
Full Name |
|---|---|---|
| ANSI/ISO Standard | SQL/PSM | SQL/Persistent Stored Module |
| IBM | SQL PL | SQL Procedural Language |
| Microsoft/ Sybase |
T-SQL | Transact-SQL |
| MySQL | MySQL | MySQL |
| Oracle | PL/SQL | Procedural Language/SQL |
| PostgreSQL | PL/pgSQL | Procedural Language/PostgreSQL Structured Query Language |
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.[10] SQL štandardy definujú SQL/JRT rozšírenia (SQL programy a typy(?) pre programovací jazyk Java) na podporu kódu Java v SQL databázach.[14] SQL Server 2005 používa SQLCLR ( spoločný jazyk pre SQL Servery) na riadenie(?) klienta.[10] 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.[10][12]
Ďalšie rozšírenia
[upraviť | upraviť zdroj]SQL: 2003 tiež definuje niekoľko ďalších rozšírení k štandardu zväčšiť SQL celkovú funkčnosť.[4] Tieto rozšírenia obsahujú:
- SQL/CLI, alebo volacie rozhranie, rozšírenie je definované v ISO/IEC 9075-3: 2003.[14] 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.[14] 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.[14] 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.[14][4] 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.[14] 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.[14][4] 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.[4]
SQL/PSM, alebo Trvalo uložené moduly, rozšírenie je definované ISO/IEC 9075-4: 2003.[14] 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
[upraviť | upraviť zdroj]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.
Referencie
[upraviť | upraviť zdroj]- 1 2 3 4 5 6 7 8 9 10 What Is Structured Query Language (SQL)? [online]. IBM, [cit. 2026-11-02]. Dostupné online. (po anglicky)
- ↑ The relational database [online]. IBM, [cit. 2026-11-02]. Dostupné online. (po anglicky)
- ↑ ISO/IEC 9075-2:1999 Information technology – Database languages – SQL – Part 2: Foundation (SQL/Foundation) [online]. ISO/IEC JTC 1/SC 32 (kópia na Portland State University), [cit. 2026-11-02]. Dostupné online. (po anglicky)
- 1 2 3 4 5 6 Andrew Eisenberg, Jim Melton, Krishna Kulkarni, Jan-Eike Michels, Fred Zemke. SQL:2003 Has Been Published. SIGMOD Record, 2004, roč. 33, čís. 1, s. 119–126. Dostupné online. (po anglicky)
- 1 2 3 4 5 SELECT [online]. PostgreSQL Global Development Group (PostgreSQL 18 Documentation), [cit. 2026-11-02]. Dostupné online. (po anglicky)
- 1 2 3 4 5 6 7 8 9 10 SQL Commands [online]. PostgreSQL Global Development Group (PostgreSQL 18 Documentation), [cit. 2026-11-02]. Dostupné online. (po anglicky)
- ↑ MERGE [online]. PostgreSQL Global Development Group (PostgreSQL 18 Documentation), [cit. 2026-11-02]. Dostupné online. (po anglicky)
- 1 2 3.4. Transactions [online]. PostgreSQL Global Development Group (PostgreSQL 18 Documentation), [cit. 2026-11-02]. Dostupné online. (po anglicky)
- ↑ SAVE TRANSACTION (Transact-SQL) [online]. Microsoft Learn, [cit. 2026-11-02]. Dostupné online. (po anglicky)
- 1 2 3 4 Common Language Runtime (CLR) Integration Overview [online]. Microsoft Learn, [cit. 2026-11-02]. Dostupné online. (po anglicky)
- ↑ Oracle Database Java Developer's Guide, 19c [online]. Oracle, [cit. 2026-11-02]. Dostupné online. (po anglicky)
- 1 2 Part V. Server Programming [online]. PostgreSQL Global Development Group (PostgreSQL 18 Documentation), [cit. 2026-11-02]. Dostupné online. (po anglicky)
- ↑ Overview of PL/SQL [online]. Oracle (Database PL/SQL Language Reference 19c), [cit. 2026-11-02]. Dostupné online. (po anglicky)
- 1 2 3 4 5 6 7 8 Appendix D. SQL Conformance [online]. PostgreSQL Global Development Group (PostgreSQL 18 Documentation), [cit. 2026-11-02]. Dostupné online. (po anglicky)
Iné projekty
[upraviť | upraviť zdroj]
Commons ponúka multimediálne súbory na tému Structured Query Language