SQL - pohľady: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
d
 
(2 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ý 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.
+
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==
 
==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 25: 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 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 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 51: 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: 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 72: 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 francúzky.
+
'''Podúloha''': Vyberte len tie hlavné mestá, v ktorých sa hovorí po francúzsky.
  
 
Riešenie:
 
Riešenie:
Riadok 90: 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 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