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.