Dnes: 18. 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 XIX.


    [Metodologie] - {Začátečníci} V devatená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 spojování tabulek, jak jinak, než pomocí dotazovacího jazyka SQL. Svým způsobem tak získáme prostředky pro vyřešení některých problémů, které nám způsobuje uplatňování normálních forem.



    Budeme-li se při vytváření tabulek řídit normálními formami a opravdu se nám podaří tabulky podle nich dovést k tvaru téměř ideálnímu, brzy zjistíme, že se nám tabulky v průběhu "vylepšování" rozpadly na větší počet tabulek s malým počtem sloupců. Jedná se do jisté míry o daň za normalizaci tabulek. Budeme poté stát před opačným problémem – jak získávat v dotazech informace z několika tabulek současně.

    Spojování tabulek je neoddělitelnou součástí každé relační databáze. Spojení je označením pro "sloučení" záznamů z více tabulek tak, abychom shromáždili informace z databáze na základě vytvořených relací, pokud možno v jednom dotazu. Jinými slovy, pokud chceme smysluplně využít navrhovaných relací během tvorby databáze, využíváme spojení a tím "slučování" záznamů z více tabulek najednou. Slučování je v uvozovkách vědomě, neboť toto označení se používá také pro operaci sloučení, ale o ní si povíme v některém z příštích pokračování tohoto seriálu.

    Operaci JOIN (spojení) bychom měli podle standardu ANSI-92 (SQL) používat v klauzuli FROM. Starší způsob využívá operace JOIN v klauzuli WHERE. Co se týká programátorských stylů, jsou stále využívány oba tyto způsoby zápisu. Hlavním plusem staršího způsobu zápisu je větší přehlednost. Ovšem, co se týká porovnání výkonu těchto dvou různých zápisů téhož, jako vítěz vychází užití JOIN v klauzuli FROM. Jsou-li totiž shromážděny potřebné informace pomocí operace JOIN ještě před klauzulí WHERE, následná analýza v části WHERE má poté efektivnější průběh.

    Pokud byste chtěli porovnat oba způsoby zápisu, mohlo by to být například takto:

    SELECT Jmeno,
           Prijmeni
      FROM Zaci,
           Hodnoceni
      WHERE Zaci.ID_Zak = Hodnoceni.ID_Zak
    

    a takto:

    SELECT Jmeno, 
           Prijmeni
      FROM Zaci
      JOIN Hodnoceni
        ON Zaci.ID_Zak = Hodnoceni.ID_Zak
    

    Vámi upřednostňovaný způsob zápisu bude samozřejmě záležet nejenom na osobních zvyklostech, ale hlavně na kompatibilitě jednotlivých způsobů u vaší databázové platformy. Základní schéma operace JOIN je tedy podle standardu ANSI-92 následující:

    SELECT Seznam potřebných polí
      FROM Tabulka_1
      JOIN Tabulka_2
        ON Tabulka_1.pole_1 relační operátor Tabulka_2.pole_2
      WHERE podmínky
    

    Za klíčovým slovem JOIN uvádíme název zdrojové tabulky, která souvisí s prvně uvedenou tabulkou za klíčovým slovem FROM. Dále jsou uvedeny názvy spojovaných polí a některý z relačních operátorů sloužících k porovnání (=, >, <, >=, <=, <>). Důležitý není stejný název porovnávaných polí – název může být různý, základní nutností je však stejný datový typ použitých polí. Podmínku pro vlastní spojení pak vytváříme stejně jako u klauzule WHERE. Pokud použitá pole tabulek mají stejný název, je nutná jednoznačná identifikace tvarem název_tabulky.název_sloupce.

    Spojování tabulek můžeme obecně rozdělit do čtyř skupin:

    • INNER JOIN – vnitřní spojení
    • OUTER JOIN – vnější spojení (levé LEFT nebo pravé RIGHT)
    • CROSS JOIN – kartézské spojení (křížové spojení)
    • FULL JOIN – úplné spojení

    Pro systém MySQL bychom upřesnili, že používá jen některých z druhů spojení – CROSS JOIN, INNER JOIN, LEFT JOIN a NATURAL LEFT JOIN. Operace CROSS JOIN rozhodně nepatří mezi hojně využívaná spojení. Navrací jako svůj výsledek nejenom všechny záznamy z obou použitých tabulek, ale taktéž všechny vzájemné kombinace – proto používaný název kartézské spojení. Tento typ spojení vytíží procesor a vzniklá záplava řádků nám pravděpodobně stejně mnoho neřekne. Pokud bychom využili následujících vzorů tabulek, pro zobrazení kartézského součinu řádků stačí zapsat dotaz:

    SELECT * 
      FROM OSOBA, 
           KONTAKT
    


    Tabulka KONTAKT


    Tabulka OSOBA

    Podle počtu řádek výchozích zdrojových tabulek lze lehce vypočítat výsledný počet kombinací řádků tabulek. Při představě "normálních" tabulek obsahujících tisíce záznamů získáme "potuchy" o hromadě nadbytečnosti a neužitečnosti výsledku. Propustíme-li ale na výstup řádky se shodou CISLO_PRAC a CISLO_P, zmizí nám většina neužitečných spojených záznamů

    . Další způsob spojení INNER JOIN představuje nejpoužívanější spojení. Pro kratší zápis u dotazů můžeme psát pouze JOIN, neboť se jedná o spojení výchozí (implicitní) a klíčové slovo INNER je nepovinné. Jako příklad byste si mohli u uvedených tabulek zapsat zápis:

    SELECT * 
      FROM OSOBA 
      INNER JOIN KONTAKT 
         ON CISLO_PRAC = CISLO_P 
    
    Vytvoříme tak spojení mezi pravou a levou tabulkou a budou v ní chybět informace o Pavlovi a telefonním čísle 3674. INNER JOIN slučuje záznamy ze dvou tabulek vždy, když budou hodnoty ve společném poli shodné.

    Operace LEFT JOIN vytváří levé vnější spojení:

    SELECT * 
      FROM OSOBA 
      LEFT JOIN KONTAKT 
             ON CISLO_PRAC = CISLO_P
    

    Levé vnější spojení bude ve výsledku obsahovat všechny záznamy z levé (první) tabulky, přestože v tabulce pravé (druhé) nebudou záznamům odpovídat žádné hodnoty. Není-li navracena shoda , je vrácena prázdná hodnota NULL.

    Poslední zmiňovaná operace spojení v MySQL je operace NATURAL LEFT JOIN. Funguje obdobně jako spojení LEFT JOIN s tím rozdílem, že budou pro spojení využita všechna shodná pole obou použitých zdrojových tabulek. Uvedený typ operace je využíván opět jen velice zřídka.

    Pokud bychom chtěli provést dotaz do tří nebo dokonce více tabulek najednou, jde to také. Mezi tabulkami tedy budeme mít zavedeny relace a každé relaci by pak odpovídala jedna uvedená vazební podmínka. Pokud bychom chtěli "zahnízďovat" dotazy, opět to jde, ale záleží na podpoře dané databázové platformy – MySQL to neumí.

    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 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 XIV. (25.08.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ářů: 1 | Přidat komentář | Informační e-mailVytisknout článek )

    Vyhledávání
     

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

    Nic 
     (1548 hl.)
    Do 1 000,- Kč 
     (1068 hl.)
    Do 10 000,- Kč 
     (999 hl.)
    Do 25 000,- Kč 
     (1378 hl.)
    Do 50 000,- Kč 
     (1016 hl.)
    Do 75 000,- Kč 
     (1178 hl.)
    Více než 75 000,- Kč 
     (1019 hl.)

    Celkem hlasovalo: 8206


    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