SQL - pohľady: Rozdiel medzi revíziami
(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}} | ||
− | + | 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 | + | ==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 | + | '''Ú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ť | + | 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 | + | 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 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'.
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