Dnes: 21. ledna 2018    | Registrace | Hledáme | Redakce | Info | Testy | Školení | Ocenění | Nápověda | Čtenář: nepřihlášen

Rychlé odkazy
  • Hlavní stránka
  • Seznam rubrik
  • Ankety
  • Editoriály
  • TOP 15
  • KONFERENCE 2008
  • KONFERENCE 2007
  • KONFERENCE 2006
  • KONFERENCE 2005
  • KONFERENCE 2004
  • Sborník
  • Testy
  • Virtuální školení
  • Personalizace


  • Hledáte práci?
    Hledáme redaktora - pojďte s námi tvořit Databázový svět!

    Vyhledávání

    Hledej
    na Databázovém světě!



    Rozšířené vyhledávání

    Rubriky
    Aktuality
    Bezpečnost
    Business
    Česká scéna
    Datové sklady
    Dokumentace
    Dotazovací jazyky
    Hardware
    Historie
    Komentáře
    Literatura
    Metodologie
    Nondb
    Open Source
    Poradna
    Produkty
    Případové studie
    Redakce
    Rozhovory
    Standardy
    Technologie
    Tipy - triky
    Tiskové zprávy
    Vývoj
    Vývojové nástroje
    Zajímavosti

    Co je to?
    Systémový katalog
    Struktury, ve kterých jsou uloženy informace o dané databázi, případně databázovém serveru. Někdy je možné se z anglického Data Dictionary setkat s pojmem datový slovník.

    Akce
    Dynamická Datová Centra
    - na semináři se seznámíte s komplexním řešením a koncepcí Dynamických Datových Center od Fujitsu Siemens Computers se speciálním důrazem na řešení FlexFrame.

    Textová inzerce
    IBPhoenix - Vše o InterBase a Firebirdu.

    Smějete se rádi? - Pak je pro vás Vtipník to pravé!

    Prodejce reklamy - Hledáme schopného prodejce reklamního prostoru, možnost i externí spolupráce.

    Přihlášený čtenář
    Nepřihlášený čtenář

    O portálu
    Databázový svět
    ISSN: 1213-5933

    Web je optimalizován pro rozlišení 1024x768, nicméně kromě větších rozlišení podporujeme i 800x600. Podrobnosti najdete zde.

    Chcete-li mít kdykoliv možnost zkontrolovat obsah našeho portálu, můžete využít podporu rss. Podrobnosti najdete zde.
    Vyvíjíme databázový a informační systém XIV.


    [Metodologie] - {Začátečníci} V dnešním čtrnáctém pokračování našeho rozsáhlého seriálu o základních principech a o vývoji databázových a informačních systémů se podíváme na další možnosti využití jazyka SQL. Zaměříme se například na spojení dvou a více tabulek, ovlivnění třídění výsledků nebo klauzuli GROUP BY.



    Na příklady v tomto díle využíváme tabulku Země, kterou jsme si vytvořili v rámci minulého pokračování tohoto seriálu.

    Provedení spojení dvou nebo více tabulek
    Má-li naše databáze více než jednu tabulku, dříve nebo později budeme potřebovat z databáze odpověď, pro kterou bude nutno využít data z více tabulek. Abychom mohli dát potřebné informace dohromady, musíme využít operace spojení (join). V MySQL je zavedeno několik odlišných typů spojování, které později podrobně rozebereme, nyní nám jde pouze o základní princip.

    select zeme.pocet_obyv,
           staty.nazev 
      from zeme,staty
      where zeme.nazev = staty.nazev
    

    Tímto zápisem jsme určili konkrétní typ spojení. V tomto případě by se podle první části dotazu mohlo jednat o tzv. úplné spojení nebo také kartézský součin (INNER JOIN nebo CROSS JOIN). Principem se jedná o vytvoření jedné velké tabulky, která by vznikla tak, že by se vytvořily všechny možné kombinace řádků obou tabulek zeme, staty. Použitá klauzule where a následující výraz s "=" nám ale určí tzv. EQUI-JOIN. Podmínkou pak vyfiltrujeme ze záplavy vzniklých řádků jen ty, které nás opravdu zajímají.

    Použitá tečková notace nám v dotazu upřesňuje, které sloupce, ze kterých tabulek, používáme. Toto upřesnění je nutné užít v případě, že se názvy sloupců v různých tabulkách shodují, ale vyžaduje-li to přehlednost, můžeme je uvést vždy, když to uznáme za vhodné. Teoreticky bychom mohli upřesnění tečkovou notací dotáhnout do krajnosti pomocí zápisu databáze.tabulka.sloupec.

    Zamezení duplicit pomocí klíčového slova DISTINCT
    Použitím následujícího dotazu s klíčovým slovem distinct budou vybrány pouze řádky s prvním užitím požadovaného kontinentu. Modifikátor distinct musí být uveden hned za klíčovým slovem select, protože se vztahuje na kombinace všech sloupců, jenž jsou za distinct uvedeny.

    select distinct kontinent 
      from země
    

    Konzole MySQL
    Konzole MySQL

    Volba pořadí pomocí ORDER BY
    Pro zvýšení přehlednosti výstupu našeho dotazu je často výhodné nechat řádky seřadit podle hodnot vhodného sloupce či sloupců. Řazení uvádíme na konci našeho dotazu za pomoci klíčových slov order by. Naši tabulku zemí seřadíme nejprve podle kontinentu, dále potom podle názvu země. Neuvedeme-li, jedná se o vzestupné řazení (od nejmenší hodnoty po největší nebo podle abecedy od A po Z), sestupné bychom zařídili přidáním slova desc na konec dotazu.

    select nazev,
           kontinent 
      from zeme
      order by kontinent, 
               nazev
    

    Na následujícím obrázku je pak řazení pro kontinent sestupné, pro název vzestupné.

    Konzole MySQL
    Konzole MySQL

    Souhrnné operace nad tabulkami
    Nad tabulkou lze provádět různé souhrnné operace neboli mluvíme o použití tzv. agregačních funkcí. Jednou z nejpoužívanějších funkcí této skupiny je SUM. Pro příklad si z naší tabulky zjistíme celkový součet počtu obyvatel všech zemí, které mají více jak 15 miliónů obyvatel. Mělo by vám z naší tabulky vyjít 50900000 po sečtení obyvatel Argentiny a Austrálie, které jediné splňují požadovanou podmínku.

    select sum(pocet_obyv)
      from zeme 
      where pocet_obyv > 15000000
    

    Počítání hodnoty pro skupinu uvedenou v klauzuli GROUP BY
    Klauzule group by nám poslouží, potřebujeme-li rozdělit záznamy tabulky do skupin. Často je využívána ve spojení s agregačními funkcemi. Klauzuli group by dále většinou kombinujeme s klauzulí where, pomocí které určíme podmínky, které řádky postoupí/nepostoupí do rozdělování na skupiny. Z naší tabulky nyní rozdělíme záznamy do skupin podle kontinentů, u nichž nás dále bude zajímat celkový součet obyvatel. Na výstupu se tedy potom objeví seznam kontinentů s výslednými součty.

    select kontinent, 
           sum(pocet_obyv)
      from země
      group by kontinent
    

    Konzole MySQL
    Konzole MySQL

    Vkládání z jiné tabulky
    Pokud potřebujeme přenést údaje z jedné tabulky do nové tabulky, mohlo by to vypadat následovně:

    create table staty 
      select * from země
    

    Tímto příkazem bychom řekli, že chceme v databázi vytvořit novou tabulku staty, která je v tomto případě kopií tabulky zeme. Předpokládám, že tušíte, že úpravou výběrového dotazu v druhé části bychom do nové tabulky mohli zanést i specifikovanější výsledek. Například chtějme vytvořit tabulku staty2, která bude obsahovat pouze sloupce kontinent a nazev z původní tabulky země:

    create table staty2 
      select kontinent, 
             nazev from země
    

    Poslední možnost, kterou si v našem "rychlopřehledu" ukážeme je vložení záznamů z jedné tabulky do druhé existující tabulky. Už by měla existovat tabulka staty z předchozí ukázky, takže si pouze vymažeme z tabulky data pomocí příkazu delete from staty. U tabulky, do které směřujeme potřebná data, nezáleží na názvu sloupců, ale musí souhlasit datové typy používaných sloupců. Následujícím dotazem přeneseme do existující tabulky staty data z tabulky zeme, přičemž přenášíme pouze data sloupců kontinent a nazev, a to – jak je dále ještě specifikováno pomocí klauzule where – pouze pro záznamy, které nezačínají u kontinentu písmenem "A".

    insert into staty(kontinent,nazev)
      select kontinent,nazev 
        from zeme
        where kontinent like 'A%'
    

    Konzole MySQL
    Konzole MySQL


    Související články:
    Vyvíjíme databázový a informační systém XXV. (28.12.2004)
    Vyvíjíme databázový a informační systém XXIV. (27.12.2004)
    Vyvíjíme databázový a informační systém XXIII. (16.12.2004)
    Vyvíjíme databázový a informační systém XXII. (07.12.2004)
    Vyvíjíme databázový a informační systém XXI. (16.11.2004)
    Vyvíjíme databázový a informační systém XX. (03.11.2004)
    Vyvíjíme databázový a informační systém XIX. (25.10.2004)
    Vyvíjíme databázový a informační systém XVIII. (13.10.2004)
    Vyvíjíme databázový a informační systém XVII. (04.10.2004)
    Vyvíjíme databázový a informační systém XVI. (21.09.2004)
    Vyvíjíme databázový a informační systém XV. (13.09.2004)
    Vyvíjíme databázový a informační systém XIII. (18.08.2004)
    Vyvíjíme databázový a informační systém XII. (02.08.2004)
    Vyvíjíme databázový a informační systém XI. (14.07.2004)
    Vyvíjíme databázový a informační systém X. (07.07.2004)
    Vyvíjíme databázový a informační systém IX. (01.07.2004)
    Vyvíjíme databázový a informační systém VIII. (23.06.2004)
    Vyvíjíme databázový a informační systém VII. (16.06.2004)
    Vyvíjíme databázový a informační systém VI. (09.06.2004)
    Vyvíjíme databázový a informační systém V. (02.06.2004)
    Vyvíjíme databázový a informační systém IV. (26.05.2004)
    Vyvíjíme databázový a informační systém III. (19.05.2004)
    Vyvíjíme databázový a informační systém II. (12.05.2004)
    Vyvíjíme databázový a informační systém I. (05.05.2004)

    ( Celý článek! | Autor: Martin Pokorný | Počet komentářů: 0 | Přidat komentář | Informační e-mailVytisknout článek )

    Vyhledávání
     

    Anketa
    Kolik ročně utratíte za dovolené?

    Nic 
     (1557 hl.)
    Do 1 000,- Kč 
     (1074 hl.)
    Do 10 000,- Kč 
     (1003 hl.)
    Do 25 000,- Kč 
     (1385 hl.)
    Do 50 000,- Kč 
     (1019 hl.)
    Do 75 000,- Kč 
     (1183 hl.)
    Více než 75 000,- Kč 
     (1022 hl.)

    Celkem hlasovalo: 8243


    Poslední komentáře
    frontierd@126.com
    frontierd@126.com
    frontierd@126.com
    c
    http://www.coachoutl

    Newsletter
    Přihlaste si nezávazně - i bez registrace - odběr informačního newsletteru. Podrobné informace najdete zde.

    Emailová adresa:


    Kalendář
    <<  Leden  >>
    PoÚtStČtSoNe
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    

    Redakci připojuje


    Nejčtenější

    Databáze je prázdná!


    Nejvíce komentářů

    Databáze je prázdná!


    Reklama






    Nenechte si ujít články na dalších webech




    Na této stránce použité názvy programových produktů, firem apod. mohou být ochrannými známkami
    nebo registrovanými ochrannými známkami příslušných vlastníků.

    Databázový svět | dfKlub - digitální fotografie | Vtipník - vtipy přímo k Vám | Reminder - přestaňte zapomínat | Databázový svět

    Copyright (c) 2004 AVRE Publishing, spol. s r.o. Všechna práva vyhrazena