SQL - pohľady: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
(Vytvorená stránka „{{Skripta_dbs}} {{Draft}} Pohľad (view) je uložený dotazu, prístupný ako virtuálna tabuľka. Pohľad je vlastne výsledkom SQL dotazu. Na rozdiel od bežných tabulie…“)
 
 
(6 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 1: Riadok 1:
 
{{Skripta_dbs}}
 
{{Skripta_dbs}}
{{Draft}}
+
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ý dotazu, 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==
 
==Vlastnosti pohľadov==
Pohľad má nasledujúce výhody:
+
Použitie pohľadu má nasledujúce výhody:
* Zobrazenie môže reprezentovať podmnožinu dát obsiahnutých v tabuľke
+
* 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 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 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 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 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)
+
* pohľad zabezpečuje väčšiu bezpečnosť (prístup len ne čítanie).
* Zobrazenie je možné obmedziť stupeň expozície tabuľky alebo tabuliek k vonkajšiemu svetu
 
  
 
===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 výberový príkaz SELECT, na základe ktorého sa pohľad vytvára.
+
*'''''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.<ref>CREATE VIEW Syntax - http://dev.mysql.com/doc/refman/5.1/en/create-view.html</ref>
+
*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 k zápisu údajov do databázy ''mysql''.
+
Poznámka: Pre tvorbu pohľadov je potrebné mať pridelené oprávnenia ''CREATE VIEW''.
  
==Pohľady praktocky==
+
==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 európy?".
+
'''Ú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 50: Riadok 48:
 
</source>
 
</source>
  
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: zvolíme ľubovolne (bez medzier!)
+
*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 - musíme uriť názvy výsledných 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 70: Riadok 68:
 
             AND Capital = ID
 
             AND Capital = ID
 
</source>
 
</source>
 +
 +
V zozname tabuliek nám pribudla ďalšia tabuľka ''HlavneMestaEuropy'':
 +
 +
[[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:
 +
 +
[[Súbor:SQL views4.png|center|frame|Zobrazenie obsahu pohľadu HlavneMestaEuropy]]
 +
 +
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:
 +
<source lang="SQL">
 +
  SELECT * FROM hlavnemestaeuropy WHERE jazyk LIKE "French"
 +
</source>
 +
 +
Výsledok:
 +
 +
[[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 23: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'.

Vytvorenie pohľadu z výsledku dotazu SELECT

Vyberieme 'CREATE VIEW'. Otvorí sa okno, kde je treba vyplniť doplňujúce informácie:

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.
  • 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:

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:

Zobrazenie obsahu pohľadu HlavneMestaEuropy

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:

Výsledok SELECT dotazu nad pohľadom HlavneMestaEuropy

Zdroje a odkazy