Jazyk SQL

Z Kiwiki
Verzia z 19:16, 17. január 2011, ktorú vytvoril Juraj (diskusia | príspevky)
(rozdiel) ← Staršia verzia | Aktuálna úprava (rozdiel) | Novšia verzia → (rozdiel)
Skočit na navigaci Skočit na vyhledávání

Jazyk SQL (Structured Query Language) je štandardizovaný jazyk pre prístup k dátam databázy.

Čo sa dá robiť pomocou SQL

  • SQL dokáže vykonávať dotazy nad databázou.
  • SQL môže načítať dáta z databázy.
  • SQL môže vkladať záznamy do databázy.
  • SQL môže aktualizovať záznamy v databáze.
  • SQL môže odstraňovať záznamy z databázy.
  • pomocou SQL je možné vytvárať nové databázy.
  • pomocou SQL je možné vytvárať nové tabuľky v databáze.
  • pomocou SQL je možné vytvárať uložené procedúry v databáze.
  • pomocou SQL je možné vytvoriť pohľady v databáze.
  • SQL dokáže nastaviť používateľské oprávnenie pre tabuľky, procedúry a pohľady.

Jazyk SQL nie je case-sensitive, to znamená že neberie ohľad na veľkosť písmen. V praxi to znamená, že výraz select má rovnaký význam ako SELECT.

Štruktúra jazyka SQL

Jazyk SQL môžeme deliť na podskupiny:

DML - Data Manipulation Language.
DML je rodina programovacích jazykov, ktoré umožňujú používateľom vkladať, mazať a aktualizovať údaje v databáze. V SQL sa používa na načítanie a manipuláciu s dátami v relačnej databáze. Patria sem príkazy: SELECT, INSERT, UPDATE, DELETE.
DDL - Data Definition Language.
Jazyk DDL je časť jazyka SQL pre definíciu dát. Patria sem príkazy, pomocou ktorých môžeme vytvárať a mazať databázy a tabuľky. Jedná sa o príkazy: CREATE, DROP, ALTER.
DCL - Data Control Language.
DCL je podmnožina jazyka SQL pre riadenie prístupu k databáze, tabuľkám databázy a ostatným objektom databázy. Patria sem príkazy GRANT, REVOKE.
TCL - Transaction Control Language.
Jazyk pre riadenie transakcií: Patria sem príkazy COMMIT a ROLLBACK, ktoré sa používajú pri operáciách, ktoré by mohli v prípade výskytu nepredvídateľnej chyby narušiť konzistenciu databázy.

Vzorový príklad 1 - databáza WORLD

Databáza world.jpg

Pre vysvetlenie SQL príkazov budeme pracovať s databázou "world"[1], ktorá je distribuovaná ako vzorová databáza pre databázový server MySQL [2]

Databáza world

Databáza world obsahuje informácie o krajinách, mestách a jazykoch používaných v jednotlivých krajinách sveta. Databáza obsahuje 3 tabuľky:

  • city,
  • country,
  • countrylanguage.

Na nasledujúcom obrázku je ER diagram datazázy world.

ER diagram datazázy world

Vzorová databáza sa dá stiahnuť zo stránok MySQL: http://dev.mysql.com/doc/index-other.html

Zoznam miest sveta

V tabuľke city je zoznam niektorých, vybraných miest sveta. Spolu je v tabuľke 4079 záznamov. Mesto je opísané nasledujúcimi atribútmi:

Tabuľka city (databáza world)
ID indentifikátor záznamu (primárny kľúč tabuľky). Slúži na jednoznačnú identifikáciu mesta.
Name Názov mesta.
CountryCode 3-miestny kód krajiny, v ktorom sa nachádza dané mesto.
District Definuje okres, v ktorom sa nachádza dané mesto
Population Populácia v danom meste.

Primárny kľúč: ID

Zoznam krajín sveta

V tabuľke country je zoznam krajín sveta. Spolu je v tabuľke 239 záznamov. Krajina je opísaná nasledujúcimi atribútmi:

Tabuľka country (databáza world)
Code Trojznakový kód krajiny.
Name Názov krajiny v anglickom jazyku.
Continent Kontinent, na ktorom sa krajina nachádza. Sú povolené len nasledujúce hodnoty: 'Asia', 'Europe', 'North America', 'Africa', 'Oceania', 'Antarctica', 'South America'.
Region Oblasť v rámci kontinentu.
SurfaceArea Rozloha krajiny.
IndepYear Rok založenia krajiny.
Population Počet obyvateľov krajiny.
LifeExpectancy Priemerná dĺžka života.
GNP Hrubý domáci produkt.
GNPOld Hrubý domáci produkt za predchádzajúce sledované obdobie.
LocalName Názov krajiny v lokálnom jazyku.
GovernmentForm Forma vlády.
HeadOfState Hlava štátu.
Capital Odkaz na hlavné mesto. Toto číslo odkazuje na ID mesta v tabuľke city.
Code2 Dvojznakový kód krajiny.

Primárny kľúč: code

Zoznam jazykov používaných v krajine

V tabuľke countrylanguage sa nachádza zoznam niektorých, vybraných jazykov. Spolu je v tabuľke 984 záznamov. Jazyk je opísaný nasledujúcimi atribútmi:

Tabuľka countrylanguage (databáza world)
CountryCode 3-miestny kód krajiny.
Language Názov jazyka
IsOfficial Informácia o tom, či je jazyk v krajine oficiálny. Atribút môže obsahovať iba hodnoty 'F' (false) alebo 'T' (true).
Percentage Percento populácie, ktoré v danej krajine hovorí daným jazykom.

Primárny kľúč je kompozitný, teda zložený z dvoch atribútov: CountryCode a Language.

Vzorový príklad 2 - databáza Prekladový slovník

V nasledujúcom texte bude navrhnutý ER diagram prekladového slovníka. V prvej verzii pôjde o jednosmerný prekladový slovník, v druhej verzii už bude obojsmerný prekladový slovník.

Slovník ver.1 - Anglicko-Slovenský slovník

Úloha:

Vytvorte funkčný databázový model jednosmerného prekladového slovníka z angličtiny do slovenčiny. Anglické slová budú mať pridelené kategórie.


Analýza úlohy:

Úlohou je vytvoriť model slovníka, v ktorom bude možné jednému anglickému slovu priradiť viacero slovenských prekladov. Návrh entít pre tento príklad je uvedený 'Vytvorenie Entitno-Relačného modelu'. V danej úlohe identifikujeme nasledovné entity:

  • anglické slová (slova_en)
  • slovenské slová (slova_sk)
  • kategórie anglických slov (kategorie)

Pre dané entity identifikujeme nasledujúce atribúty:

  • slova_en(*id, slovo_en, kategoria_id)
  • slova_sk(*id, slovo_sk, slovo_en_id)
  • kategorie(*id, kategoria)

Medzi danými entitami identifikujeme nasledujúcu mohutnosť:

  • slova_en - slova_sk
    • mohutnosť 1:N,
    • modalita: 1 (povinná účasť).
  • kategorie - slova_en
    • mohutnosť 1:N,
    • modalita: 1 (povinná účasť).

Pre navrhnuté entity a identifikované vzťahy medzi nimi navrhujeme nasledujúci entitno-relačný diagram.

ERD - Jednosmerný prekladový slovník

Navrhnuté dátové typy pre atribúty entít sú vidieť na predchádzajúcom obrázku.

Slovník ver.2 - obojsmerný slovník

Úloha:

Vytvorte funkčný databázový model obojstranného prekladového slovníka. Daný preklad slova (anglického/slovenského) bude zaradený do kategórie.


Analýza úlohy:

Podľa zadania je potrebné navrhnúť obojstranný prekladový slovník. V praxi to znamená, že jedno anglické slovo môže mať viac slovenských prekladov a jedno slovenské slovo môže mať taktiež viac anglických prekladov. Medzi týmito entitami je teda vzťah M:N. Vieme, že vzťah M:N sa nedá priamo namodelovať. Rozdelíme ho teda na dva vzťahy:

  • slova_en - preklad (1:N)
  • preklad - slova_sk (N:1)

Pre entitu preklad definujeme nasledujúce atribúty:

  • en_id - odkaz na anglické slovo (cudzí kľúč),
  • sk_id - odkaz na slovenské slovo (cudzí kľúč),
  • kategorie_id - odkaz na kategóriu (cudzí kľúč).

Pre túto entitu určíme kompozitný primárny kľúč. Bude pozostávať z dvoch atribútov: (en_id, sk_id). Na nasledujúcom obrázku je obsah tabuľky preklad. V ľavej časti vidieť len hodnoty cudzích kľúčov tak, ako sú uložené v tabuľke. V pravej časti je namiesto týchto číselných hodnôt zobrazené samotné slovenské, resp anglické slovo a aj názov kategórie.


Obsah tabuľky preklad

Na nasledujúcom obrázku je entitno relačný diagram pre obojsmerný prekladový slovník.

ERD obojsmerného prekladového slovníka

Navrhnuté dátové typy pre atribúty entít sú vidieť na predchádzajúcom obrázku.

Spôsob zápisu syntaxe SQL

V nasledujúcich častiach budú vysvetľované príkazy jazyka SQL. Pri definovaní syntaxe v programovacích jazykoch je zaužívaný spôsob pomocou Backus-Naurovej formy[3] - BNF. Je to univerzálny spôsob, akým je možno vysvetliť syntax programovacieho jazyka.

V krátkosti vysvetlíme tento zápis.

V pravidlách BNF sa vyskytujú metasymboly (symboly, které nie sú súčasťou syntaxe, ale umožňujú zápis syntaxe):

  • ::= oddeľuje ľavú a pravú stranu výrazu. Ľavá strana - syntaktický zápis, ktorý ideme definovať. Pravá strana - definícia syntaxe.
  • | oddeľovač variánt
  • [math][ ][/math] zátvorky vymedzujúce nepovinnú časť
  • { } metazátvorky (ohraničujú určitú časť pravidla)
  • '...' symbol označujúci nula nebo viac opakovaní bezprostredne predchádzajúceho symbolu (alebo viac symbolov v metazávorkách).


Príklad:

   INSERT::= INSERT INTO tabulka [(stlpec1 {,stlpec2}… )] obsah
   
   obsah ::= VALUES ( hodnota {, hodnota }… ) | DEFAULT VALUES | dotazový_výraz

Vysvetlenie:

  • Definujeme syntaktické pravidlá pre príkaz INSERT.
  • V príkaze INSERT sú povinné tieto časti: INSERT INTO tabulka a obsah
  • to, čo je v hranatých zátvorkách, je nepovinné.
    • ak budeme uvádzať názvy stĺpcov, musíme uviesť názov minimálne jedného (stlpec1), ale možeme uviesť aj iné názvy stĺpcov (obsah v zátvorkách { }). Pri názvoch hranaté zátvorky nepíšeme.

Zdroje a odkazy