Databázové a informačné systémy - dotazovací jazyk SQL
(informatika pre študentov štvrtého-piateho ročníka Leteckej fakulty, TU KE - 2005 - RNDr. Peter Szabó)

Relačný dátový model umožnil vznik univerzálneho dotazovacieho jazyka,  pomocou ktorého užívatelia môžu komunikovať cez SRBD s bázou dát, respektíve programátori môžu vytvárať databázové systémy.  Tento univerzálny jazyk sa nazýva SQL.

Structured Query Language - štruktúrovaný dotazovací jazyk
- krátka história vzniku jazyka.

Pôvodne nazývaný SEQUEL (Structured English Query Language -"sieskjuel") vyvinuli v spojitosti s relačným datavým modelom SystemR (čo bol predchodca databázového systému DB2) v IBM v r. 1970 na základe 12. pricípov  Edgar F. Codda.  Výrobcovia, hlavne IBM a ORACLE mali záujem vyvinúť štandardizovaný dotazovací jazyk, pomcou ktorého možno programovať relačné databázy. Preto výrobcovia databázových systémov založili skupinu ANSI NCITS (National Committee on Information Technology Standards) ktorá položila základy jazyka SQL.
ANSI (American National Standards Institute) normu SQL  registrovali v r. 1986 a následne v r. 1987 bol prevzatý aj do ISO (International Standards Organization) a aktuálne obohatený novými prvkami, tak ako si to prax vyžiadala. V súčasnosti existujú už 4 štandardy SQL

SQL86
SQL89
SQL92  ( v odbornej literatúre aj SQL2 )
SQL99 ( v odbornej literatúre aj SQL3 )

Popisy SQL, názvy noriem:

ISO/IEC 9075:1992, "Information Technology --- Database Languages --- SQL" 
ANSI X3.135-1992, "Database Language SQL"

Jazyk SQL

SQL je základný nástroj pre manipuláciu, správu a organizovanie dát uložených v databázových systémoch. Je určený predovšetkým pre užívateľov, ale v mnohých smeroch ho využívajú aj tvorcovia aplikácií. Je adaptabilný pre akékoľvek prostredie. SQL nie je len dotazovací jazyk. S jeho pomocou môžeme  definovať dáta (štruktúru tabuľky - Data Definition Language (DDL) ) , vypĺňať stĺpce tabuľky dátami a definovať vzťahy a organizáciu medzi položkami dát (Data Manipulation Language (DML)). Umožňuje riadenie prístupu k dátam (udeľovanie a odoberanie prístupových oprávnení na rôznych úrovniach), čím chráni dáta pred náhodným alebo úmyselným zničením, neautorizovaným čítaním alebo manipuláciou s nimi. Taktiež umožňuje spoločné využívanie dát a zabezpečuje hladký priebeh činností v prípade, že k dátam pristupujú viacerí užívatelia.

SQL je špecializovaný programovací jazyk, ktorý sa používa buď užívateľsky alebo interaktívne k okamžitému riešeniu úloh (viď. SRBD FireBird), alebo sa jeho príkazy vkladajú do hostiteľského jazyka.(viď. Visual Fox Pro) . SQL je jazyk interpretačný, možno príkazy jazyka preložiť do pre-kódu alebo aj do samsotatne spustiteľného kódu. SQL však nie je plnohodnotným programovacím jazykom, lebo sa v ňom vo väčšine implementácií nenachádzajú riadiace programové konštrukcie (príkazy cyklov a pod.), ktoré by mal obsahovať každý základný programovací jazyk.

Nižšie uvedieme len základné príkazy SQL. Úplný zoznam SQL príkazov pre každý SRBD je iný aj preto lebo systémy umožňujú dodefinovať ďalšie príkazy. (Príklad úplného zoznamu SQL príkazov uvedieme pre SRBD FireBird) . Základné príkazy SQL sú normované, totožné pre každú implementáciu. Nižšie uvedieme základné príkazy  SQL, ktoré v súčasnosti  obsahuje skúška ECDL z databázových systémov )


Príkazy na definovanie údajov (DDL)

CREATE
Založenie databázy. Príklad: Založenie tabuľky Ucet so štyrmi stĺpcami.

CREATE TABLE Ucet (
  Cislouctu NUMERIC(24),
  Majitel VARCHAR(60),
  Otvorenie DATE,
  Stav VARCHAR(1),
    PRIMARY KEY (Cislouctu)
);

ALTER
Modifikácia štruktúry tabuľky. Príklad : Modifikácia dátového typu tabuľky.

ALTER TABLE  Ucet
  MODIFY Cislouctu VARCHAR(26);

DROP
Vymazanie  objektu. Príklad:

DROP INDEX Ucet_1;

COMMENT
Komentár k datovému objektu. Príklad:

COMMENT ON TABLE Ucet IS 'Účty zákazníkov';
COMMENT ON COLUMN Ucet.Stav IS 'Stav účtu: "N" - Normálny, "D" - Vymazaný';

Príkazy na manipulácie s údajmi (DML)

SELECT
Základným príkazom jazyka SQL je príkaz na dotazovanie SELECT. Je to formálny príkaz, užívateľ (programátor) určuje len to s aký výstup potrebuje, samotný algoritmus výberu realizuje databázový systém.

Príklad:

SELECT COUNT(*), Majitel
FROM Ucet
WHERE Stav = 'N'
GROUP BY Majitel
HAVING COUNT(*) > 1
ORDER BY Majitel

Tento príklad vylistuje tie osoby, ktoré majú viac ako jeden aktívnych účtov. V prvom stĺpci bude počet aktívnych účtov, v druhom meno majiteľa. Výstup bude usporiadaný vzostupne podľa mena majiteľov.

Parametre príkazu SELECT
Príkaz SELECT môže obsahovať viac nepovinných parametrov. Parametre nemusia byť uvedené. Príklady niektorých parametrov príkazu SELECT.

Za príkazom  SELECT môžeme vymenovať stĺpce výstupu, môžeme tu uviesť aj ďalšie príkazy SELECT
Príklad:

SELECT Zakaznik.Meno, (SELECT SUM(Suma) FROM Objednavka WHERE ZakaynikID = Zakaznik.ID) SumaObjednaky
Tento príklad vysvietí vedľa mena zákazníka aj sumy objednavok daneho zakaznika.

FROM
Určuje, že z ktorej tabuľky chceme získať výstup
Príklad:

SELECT *
FROM Pacient, Liecba
Tento príklad priradí k paciantom všetky liečby ( karteziansky súčin). To nemá veľký zmysel lebo, ku každému pacientovi chceme priradiť liečby, ktoré pacient absolvoval, to možno takto realizovať :

SELECT *
FROM Pacient KEY JOIN Liecba
Tento príklad funguje, keď je definovaný cudzí kľúč z tabuľky Liecba na tabuľku Pacient. ( Pmocou primárneho kľúča (primary key - pk) je zabezpečená tzn entitná integrita  bázy dát a tiež referenčná integrita cez  tzv. cudzí kľúč (foreign key - fk)). Niektré databázové systémy (Oracle ) nepodporujú takéto spojenie

WHERE
Filtrovanie výstupu vzhľadom na karteziansky súčin. Príklad :

SELECT *
FROM Pacient, Liecba
WHERE Pacient.ID = Liecba.PacientID AND Liecba.Datum = CURRENT DATE
Tento dotaz generuje výstup so zoznamom pacientov a liečbami ktoré boli vykonané dnes. Parameter WHERE môže obsahovať logické výrazy s operátormi OR, AND a NOT.

GROUP BY
Vytváranie skupiny riadkov vo výstupe. Príklad:

SELECT COUNT(*), Majitel
FROM Ucet
WHERE Stav = 'N'
GROUP BY Majitel
Tento príklad vytvára riadky výstupu podľa majiteľov účtov. SELECT COUNT(*) znamená počet riadkov jednotlivých skupín.

HAVING
Tento parameter má podobný význam  ako WHERE , rozdiel je v tom, že tento príkaz môžeme aplikovať na skupiny, ktoré sme vytvorili pomocou príkazu GROUP BY. Príklad:

SELECT COUNT(*), Majitel
FROM Ucet
WHERE Stav = 'N'
GROUP BY Majitel
HAVING COUNT(*) > 1
V porovnaní s predchádzajúcim príkladom, tento výstup vysvirtí len tie skupiny, ktoré obsahujú aspoň dva riadky.

ORDER BY
Usporiadanie výstupu, príklad

SELECT *
FROM Pacient
ORDER BY DatumNarodenia DESC
Tento príklad generuje zoznam pacientov podľa dátumu narodenia od najmladšieho.


INSERT
Pridanie, vloženie nových údajov  k tabuľke. Príklad

INSERT INTO Ucet (Cislouctu, Majitel, Otvorenie, Stav)
VALUES (123456, 'Ladislav Malý', '14.05.2004', 'N');

UPDATE
Úprava, modifikácia existujúcich údajov. Príklad

UPDATE Ucet SET Stav = 'D' WHERE Cistlouctu = 123456;
Modifikácia stavu účtu.

DELETE
Výmaz údajov z tabuľky.Príklad

DELETE FROM Ucet WHERE Cislouctu = '123456';
Tento príkaz vymaže účet '123456' z tabuľky Ucet.


naspäť
21.12.2004