Databázový jazyk SQL

Databázový jazyk SQL vznikal vo firme IBM postupne v rokoch 1974-75, kedy sa vymedzil určitý počet príkazov, ktorými sa relačná databáza mala ovládať. Relačná databáza bola založená na relačnej algebre, ktorá vychádza z diskrétnej matematiky. Vznikol tak jazyk s názvom SEQUEL (Structured English Query Language), až neskôr sa premenoval na skratku SQL. Postupne sa tento jazyk v 80. rokoch štandardizoval.

Jazyk SQL je neprocedurálny jazyk, tzn. že popisuje, „čo“ chceme získať, ale nie „ako“, akým spôsobom, teda je to „dopytovací“ jazyk. Dnešné podoby tohto jazyka už obsahujú aj procedurálnu časť tohto jazyka PL/SQL vo forme písania procedúr, ale jedná sa skôr o sekundárnu úlohu tohto jazyka. Príkazy jazyka SQL sa rozdeľujú do niekoľkých skupín: (uvedené len najdôležitejšie)

  • DDL (Data Definition Language) – príkazy definujúce databázovú štruktúru
  • DML (Data Manipulation Language) – príkazy definujúce manipuláciu s dátami
  • DCL (Data Control Language) – príkazy definujúce prístupové práva
  • TCL (Transaction Control) – príkazy definujúce zmeny DML príkazov

V nasledujúcich príkladoch použitia SQL príkazov bude syntax náležať databázovým systémom Oracle, avšak podobnosť s inými databázovými systémami je veľmi podobná. Pri písaní príkazov nie je nutné dodržiavať verzály, ale môže to prispieť k prehľadnosti čítania. Identifikátory podliehajú case-sensitive.

DDL (Data Definition Language)

Do príkazov skupiny DDL patria príkazy:

  • CREATE – vytvorenie objektov v databáze
  • ALTER – zmena štruktúry databázy
  • DROP – vymazanie objektov z databázy
  • TRUNCATE – vymazanie všetkých záznamov z tabuľky, okrem samotnej definície tabuľky
  • COMMENT – pridanie komentára k dátovému slovníku
  • RENAME – premenovanie objektu

Niektoré príklady použitia:

DML (Data Manipulation Language)

Do príkazov skupiny DML patria príkazy:

  • SELECT – získanie dát z databázy
  • INSERT – pridanie dát do tabuľky
  • UPDATE – aktualizácia existujúcich dát v tabuľke
  • DELETE – odstránenie všetkých záznamov z tabuľky

Niektoré príklady použitia:

Výber z dvoch a viac tabuliek:

(+) znamená vonkajšie spojenie tabuliek, vypíše aj tie názvy, ktoré sú NULL

Klauzuly:

GROUP BY – zoskupenie, agregačné funkcie: AVG, SUM,…

Do SELECT môžme zadať len stĺpec, ktorý sa vyskytuje aj v GROUP BY.

HAVING – obdoba príkazu WHERE s tým rozdielom, že funguje na už zoskupené dáta

V tomto prípade predstavuje príkaz WHERE tzv. vnútorné integritné pravidlo a príkaz HAVING vonkajšie integritné pravidlo. Z hľadiska optimalizácie vyhľadávania sa odporúča vždy začať vnútorným integritiným pravidlom vo forme príkazu WHERE.

Existujú aj vnorené SQL selekty, ktoré fungujú úplne rovnako ako klasické selekty, len je potrebné ich vymedziť zátvorkami, pričom vyhodnocujú sa najskôr.

Komplikovanejšie selekty:

Ten istý selekt je možné prepísať aj pomocou príkazu JOIN.

… teraz je možné postupovať dvojakým spôsobom: (pričom defaultný stav je stav INNER JOIN, t.j. ak pr.id_pobocky = po.id_pobocky)

  • LEFT OUTER JOIN (LEFT JOIN) – z ľavej tabuľky chceme aj NULL hodnoty
  • RIGHT OUTER JOIN (RIGHT JOIN) – z pravej tabuľky chceme aj NULL hodnoty

Úloha 1: Vyberte názvy projektov, na ktorých pracujú dvaja alebo traja zamestnanci.

Nech máme dve tabuľky Project a Zamestnanci. V zásade by nám tieto tabuľky stačili, ale potrebujeme ešte jednu Project_Zam, ktorá bude obsahovať ID obidvoch tabuliek a prostredníctvom tejto tabuľky bude prebiehať vyhľadávanie.

Úloha 2: Zistiť názvy predmetu a kredity v študijnom programe VTI pre typ štúdia denný.

Obdobný príklad ako v úlohe 1, tiež budeme mať tri tabuľky.

DCL (Data Control Language)

Do príkazov skupiny DCL patria príkazy:

  • GRANT – poskytuje prístup alebo privilégiá pre používateľov databázy
  • REVOKE – zamedzuje prístup alebo privilégiá pre používateľov databázy

Niektoré príklady použitia:

TCL (Transaction Control)

Do príkazov skupiny TCL patria príkazy:

  • COMMIT – ukončuje práve prebiehajúcu transakciu
  • SAVEPOINT – označenie miesta pre neskorší návrat
  • ROLLBACK – vracia dáta v databáze do pôvodnej podoby od vykonania posledného príkazu COMMIT

Príkazy pre transakcie sa väčšinou vykonávajú v niekoľkých príkazoch po sebe, pretože z podstaty transakcie spolu navzájom súvisia.

Príkaz COMMIT reaguje bezprostredne na príkaz ROLLBACK.

Nech máme tabuľku pracovnici, ktorá obsahuje mzdy pracovníkov. Chceme hromadne zvýšiť mzdy pracovníkov, napr. príkazom UPDATE. Transakcia musí byť bezpečná, tzn. že ak z nejakých príčin nedôjde k zvýšeniu miezd v dôsledku čokokoľvek, vykonané zmeny by nemali ostať v platnosti a hodnoty miezd by sa mali vrátiť do pôvodného stavu. Za týmto účelom sa vytvárajú tzv. body návratu, ktoré je možné definovať pred uvedením inkriminovanej zmeny (príkaz SAVEPOINT). Príkazom COMMIT potvrdzujeme vykonanie príkazov a príkazom ROLLBACK vyvolávame dané body návratu.

Teda, ako je možné vidieť, transakcia má nejaký začiatok a koniec. Príkazy spolu navzájom úzko súvisia, čím transakcia pozostáva z určitých jednotiek práce, ktoré sa musia vykonať v logickom poradí ako skupina, alebo sa nevykonajú vôbec.

PL/SQL

V úvode bolo naznačené, že jazyk SQL je neprocedurálny jazyk, teda skôr funkcionálny, dopytovací jazyk. Jazyk SQL poskytuje získavanie dát z databázy, manipuláciu s dátami, návrat výsledku používateľovi, prípade zápis do dátového zdroja. Aj napriek tomu umožňuje používať skupinu príkazov v určitom celku, ktorá sa nazýva procedúra alebo funkcia. Jedná sa o klasický typ procedúr/funkcií, ktoré sú známe z rôznych programovacích jazykov. Všetky spomenuté príkazy v SQL je možné písať ako postupnosť príkazov v PL/SQL v určitých štruktúrach (procedúrach, funkciách, spúšťačoch a podobne). Každá štruktúra slúži k nejakému účelu. Transakcie sú jednou z pokročilejších záležitostí a patria do časti PL/SQL.

Príklad použitia procedúry:

Príkad použitia funkcie:

Príklad použitia spúšťača (trigger):

Trigger, spúšťač, slúži na vykonanie udalosti pred/po (AFTER, BEFORE) spusteniu nejakého príkazu (INSERT, DELETE, UPDATE).

Týmto boli uvedené štandardné príkazy jazyka SQL a PL/SQL. Samozrejme, existuje väčšie množstvo príkazov a vzťahov medzi nimi, avšak uvedené spôsoby reprezentácie ilustrovali najpoužívanejšie z nich.

You may also like...