SQL - pohľady: Rozdiel medzi revíziami
d  | 
				|||
| (3 medziľahlé úpravy od rovnakého používateľa nie sú zobrazené.) | |||
| Riadok 1: | Riadok 1: | ||
{{Skripta_dbs}}  | {{Skripta_dbs}}  | ||
| − | + | Pohľad (view) je uložený dotaz, prístupný ako virtuálna tabuľka. Pohľad je vlastne výsledkom SQL dotazu. Na rozdiel od bežných tabuliek v relačnej databáze, pohľad nepredstavuje štandardnú tabuľku, ale jedná sa o dynamické, virtuálne tabuľky vypočítaných alebo získaných z údajov z databázy. Zmena údajov v zdrojovej tabuľke (odkiaľ pohľad čerpá údaje) spôsobí zmenu údajov, ktoré poskytuje pohľad.  | |
| − | Pohľad (view) je uložený   | ||
==Vlastnosti pohľadov==  | ==Vlastnosti pohľadov==  | ||
| − | + | Použitie pohľadu má nasledujúce výhody:  | |
| − | *   | + | * zobrazenie môže reprezentovať podmnožinu dát obsiahnutých v tabuľke,  | 
| − | *   | + | * pohľad môže jednoducho spojiť viacero tabuliek  do jednej virtuálnej tabuľky,  | 
| − | *   | + | * pohľad môže byť použitý ako agregácia tabuliek, kde vo výslednej virtuálnej tabuľke (v pohľade) môžu byť vypočítavané polia,  | 
| − | *   | + | * pohľad sa navonok javí ako jednoduchá tabuľka, aj keď jej obsahom môže byť komplikovaný dotaz,  | 
| − | *   | + | * pohľad zaberá len veľmi málo miesta. Databáza obsahuje len definíciu pohľadu, nie kópie všetkých údajov, ktoré prezentuje,  | 
| − | *   | + | * pohľad zabezpečuje väčšiu bezpečnosť (prístup len ne čítanie).  | 
| − | |||
===Vytvorenie pohľadu===  | ===Vytvorenie pohľadu===  | ||
| − | Pre vytvorenie pohľadu môžeme použiť SQL nasledovnú syntax:  | + | Pre vytvorenie pohľadu môžeme použiť SQL nasledovnú syntax<ref>CREATE VIEW Syntax - http://dev.mysql.com/doc/refman/5.1/en/create-view.html</ref>:  | 
<source lang="SQL">  | <source lang="SQL">  | ||
CREATE  | CREATE  | ||
| Riadok 26: | Riadok 24: | ||
</source>  | </source>  | ||
kde:  | kde:  | ||
| − | *'''''select_statement''''' - SQL   | + | *'''''select_statement''''' - výberový SQL príkaz SELECT, na základe ktorého sa pohľad vytvára.  | 
*Klauzula '''''ALGORITHM''''' ovplyvňuje to, ako MySQL spracováva pohľad.  | *Klauzula '''''ALGORITHM''''' ovplyvňuje to, ako MySQL spracováva pohľad.  | ||
*'''''DEFINER''''' určuje vlastníka, resp. tvorcu pohľadu.  | *'''''DEFINER''''' určuje vlastníka, resp. tvorcu pohľadu.  | ||
*Klauzula '''''SQL SECURITY''''' definuje prístupové pravidlá pre daný pohľad.  | *Klauzula '''''SQL SECURITY''''' definuje prístupové pravidlá pre daný pohľad.  | ||
| − | *Klauzula '''''WITH CHECK OPTION''''' môže obmedzovať vkladanie alebo aktualizáciu údajov  v zdrojových tabuľkách.  | + | *Klauzula '''''WITH CHECK OPTION''''' môže obmedzovať vkladanie alebo aktualizáciu údajov  v zdrojových tabuľkách.  | 
| − | Poznámka: Pre tvorbu pohľadov je potrebné mať oprávnenia   | + | Poznámka: Pre tvorbu pohľadov je potrebné mať pridelené oprávnenia ''CREATE VIEW''.  | 
==Pohľady prakticky==  | ==Pohľady prakticky==  | ||
Zoberme si príklad z časti [[SQL_-_select#SELECT_-_zoskupovanie|SQL príkazy]].    | Zoberme si príklad z časti [[SQL_-_select#SELECT_-_zoskupovanie|SQL príkazy]].    | ||
| − | Úloha: Vytvorte pohľad z výsledkov dotazu 'Akými jazykmi sa hovorí v hlavných mestách   | + | '''Úloha''': Vytvorte pohľad z výsledkov dotazu 'Akými jazykmi sa hovorí v hlavných mestách Európy?'.  | 
SQL dotaz pre výber požadovaných údajov je    | SQL dotaz pre výber požadovaných údajov je    | ||
<source lang="SQL">  | <source lang="SQL">  | ||
| − |     SELECT country.name AS Krajina,city.Name AS Mesto,LANGUAGE, continent    | + |     SELECT country.name AS Krajina, city.Name AS Mesto, LANGUAGE, continent    | 
    FROM countrylanguage, city, country  |     FROM countrylanguage, city, country  | ||
    WHERE Continent = 'Europe'  |     WHERE Continent = 'Europe'  | ||
| Riadok 52: | Riadok 50: | ||
Po spustení SQL dotazu v prostredí phpMyAdmin dostaneme výsledok dotazu. Pod tabuľkou z výsledkami je časť 'Operácie s výsledkami dopytu'.  | Po spustení SQL dotazu v prostredí phpMyAdmin dostaneme výsledok dotazu. Pod tabuľkou z výsledkami je časť 'Operácie s výsledkami dopytu'.  | ||
| − | [[Súbor:SQL views1.png|center]]  | + | [[Súbor:SQL views1.png|center|frame|Vytvorenie pohľadu z výsledku dotazu SELECT]]  | 
Vyberieme 'CREATE VIEW'. Otvorí sa okno, kde je treba vyplniť doplňujúce informácie:  | Vyberieme 'CREATE VIEW'. Otvorí sa okno, kde je treba vyplniť doplňujúce informácie:  | ||
| − | [[Súbor:SQL views2.png|center]]  | + | [[Súbor:SQL views2.png|center|frame|Vytvorenie pohľadu - definovanie názvu pohľadu a názvov jeho atribútov]]  | 
*ALGORITHM - spôsob vytvárania pohľadu. Ponecháme prednastavenú hodnotu UNNDEFINED.  | *ALGORITHM - spôsob vytvárania pohľadu. Ponecháme prednastavenú hodnotu UNNDEFINED.  | ||
| − | *VIEW name - názov pohľadu  | + | *VIEW name - názov pohľadu. Názov je možné zvoliť ľubovoľne (bez medzier!). V príklade je zvolený názov ''HlavneMestaEuropy''.  | 
| − | *Názvy stĺpcov -   | + | *Názvy stĺpcov - určíme názvy výsledných stĺpcov v pohľade. Ak ich neuvedieme, použijú sa názvy z SQL dotazu.  | 
Výsledokm je SQL dotaz:  | Výsledokm je SQL dotaz:  | ||
| Riadok 73: | Riadok 71: | ||
V zozname tabuliek nám pribudla ďalšia tabuľka ''HlavneMestaEuropy'':  | V zozname tabuliek nám pribudla ďalšia tabuľka ''HlavneMestaEuropy'':  | ||
| − | [[Súbor:SQL views3.png|center]]  | + | [[Súbor:SQL views3.png|center|frame|Pohľad HlavneMestaEuropy v prehľade tabuliek (prostredie phpMyAdmin)]]  | 
Ak si zobrazíme obsah tabuľky ''HlavneMestaEuropy'', dostaneme rovnaký výsledok ako pre SQL dotaz na začiatku tohto príkladu:  | Ak si zobrazíme obsah tabuľky ''HlavneMestaEuropy'', dostaneme rovnaký výsledok ako pre SQL dotaz na začiatku tohto príkladu:  | ||
| − | [[Súbor:SQL views4.png|center]]  | + | [[Súbor:SQL views4.png|center|frame|Zobrazenie obsahu pohľadu HlavneMestaEuropy]]  | 
Na pohľad môžeme aplikovať ľubovoľný SQL výberový dotaz.  | Na pohľad môžeme aplikovať ľubovoľný SQL výberový dotaz.  | ||
| − | '''Podúloha''': Vyberte len tie hlavné mestá, v ktorých sa hovorí po   | + | '''Podúloha''': Vyberte len tie hlavné mestá, v ktorých sa hovorí po francúzsky.  | 
Riešenie:  | Riešenie:  | ||
| Riadok 91: | Riadok 89: | ||
Výsledok:  | Výsledok:  | ||
| − | [[Súbor:SQL views5.png|center]]  | + | [[Súbor:SQL views5.png|center|frame|Výsledok SELECT dotazu nad pohľadom HlavneMestaEuropy]]  | 
==Zdroje a odkazy==  | ==Zdroje a odkazy==  | ||
<references/>  | <references/>  | ||
Aktuálna revízia z 22:26, 17. január 2011
Pohľad (view) je uložený dotaz, prístupný ako virtuálna tabuľka. Pohľad je vlastne výsledkom SQL dotazu. Na rozdiel od bežných tabuliek v relačnej databáze, pohľad nepredstavuje štandardnú tabuľku, ale jedná sa o dynamické, virtuálne tabuľky vypočítaných alebo získaných z údajov z databázy. Zmena údajov v zdrojovej tabuľke (odkiaľ pohľad čerpá údaje) spôsobí zmenu údajov, ktoré poskytuje pohľad.
Vlastnosti pohľadov
Použitie pohľadu má nasledujúce výhody:
- zobrazenie môže reprezentovať podmnožinu dát obsiahnutých v tabuľke,
 - pohľad môže jednoducho spojiť viacero tabuliek do jednej virtuálnej tabuľky,
 - pohľad môže byť použitý ako agregácia tabuliek, kde vo výslednej virtuálnej tabuľke (v pohľade) môžu byť vypočítavané polia,
 - pohľad sa navonok javí ako jednoduchá tabuľka, aj keď jej obsahom môže byť komplikovaný dotaz,
 - pohľad zaberá len veľmi málo miesta. Databáza obsahuje len definíciu pohľadu, nie kópie všetkých údajov, ktoré prezentuje,
 - pohľad zabezpečuje väčšiu bezpečnosť (prístup len ne čítanie).
 
Vytvorenie pohľadu
Pre vytvorenie pohľadu môžeme použiť SQL nasledovnú syntax[1]:
CREATE
    [OR REPLACE]
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = { user | CURRENT_USER }]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]
kde:
- select_statement - výberový SQL príkaz SELECT, na základe ktorého sa pohľad vytvára.
 - Klauzula ALGORITHM ovplyvňuje to, ako MySQL spracováva pohľad.
 - DEFINER určuje vlastníka, resp. tvorcu pohľadu.
 - Klauzula SQL SECURITY definuje prístupové pravidlá pre daný pohľad.
 - Klauzula WITH CHECK OPTION môže obmedzovať vkladanie alebo aktualizáciu údajov v zdrojových tabuľkách.
 
Poznámka: Pre tvorbu pohľadov je potrebné mať pridelené oprávnenia CREATE VIEW.
Pohľady prakticky
Zoberme si príklad z časti SQL príkazy.
Úloha: Vytvorte pohľad z výsledkov dotazu 'Akými jazykmi sa hovorí v hlavných mestách Európy?'.
SQL dotaz pre výber požadovaných údajov je
   SELECT country.name AS Krajina, city.Name AS Mesto, LANGUAGE, continent 
   FROM countrylanguage, city, country
   WHERE Continent = 'Europe'
         AND Capital = ID
         AND countrylanguage.CountryCode = city.CountryCode
         AND country.code=city.CountryCode
         AND isOfficial = true
Po spustení SQL dotazu v prostredí phpMyAdmin dostaneme výsledok dotazu. Pod tabuľkou z výsledkami je časť 'Operácie s výsledkami dopytu'.
Vyberieme 'CREATE VIEW'. Otvorí sa okno, kde je treba vyplniť doplňujúce informácie:
- ALGORITHM - spôsob vytvárania pohľadu. Ponecháme prednastavenú hodnotu UNNDEFINED.
 - VIEW name - názov pohľadu. Názov je možné zvoliť ľubovoľne (bez medzier!). V príklade je zvolený názov HlavneMestaEuropy.
 - Názvy stĺpcov - určíme názvy výsledných stĺpcov v pohľade. Ak ich neuvedieme, použijú sa názvy z SQL dotazu.
 
Výsledokm je SQL dotaz:
  CREATE  ALGORITHM = UNDEFINED VIEW `HlavneMestaEuropy` (krajina,mesto,jazyk,kontinent)
         AS SELECT country.name AS Krajina, city.Name AS Mesto, LANGUAGE, continent
            FROM countrylanguage, city, country
            WHERE Continent = 'Europe'
            AND Capital = ID
V zozname tabuliek nám pribudla ďalšia tabuľka HlavneMestaEuropy:
Ak si zobrazíme obsah tabuľky HlavneMestaEuropy, dostaneme rovnaký výsledok ako pre SQL dotaz na začiatku tohto príkladu:
Na pohľad môžeme aplikovať ľubovoľný SQL výberový dotaz.
Podúloha: Vyberte len tie hlavné mestá, v ktorých sa hovorí po francúzsky.
Riešenie:
   SELECT * FROM hlavnemestaeuropy WHERE jazyk LIKE "French"
Výsledok:
Zdroje a odkazy
- ↑ CREATE VIEW Syntax - http://dev.mysql.com/doc/refman/5.1/en/create-view.html
 




