Zkratka na hlavní stranu: Alt + Shift + horní 2(ě)
Linkedin FB e-mail Google Plus Twitter

Hledat na tomto webu

 
 

SQL: Svislé spojení tabulek
se zachováním informace o zdroji každého řádku

 

Vytvořeno
28.6.2012

 

Pokud potřebujete v SQL vertikálně spojit tabulky se stejnou strukturou,
seřadit v nich společně data podle zvoleného kritéria,
a zachovat si informaci, ze které tabulky který řádek pochází
(vytvořit sloupec s označením zdroje),

můžete pomocí sjednocení UNION spojit dotazy SELECT,
a abyste věděli, ze které tabulky řádek je, můžete do každého dotazu přidat konstantu.

Dá se totiž předpokládat, že v každé tabulce bude id (či jiný primární klíč) začínat od jedničky,
a že podle id tedy příslušnost řádku k tabulce nepoznáte.

Příklad se syntaxí PHP…
$dotaz    =  "SELECT *, 'prvni' as zdroj FROM prvnitabulka WHERE verejny='1' AND datum <= NOW() AND rubrika>=18 AND rubrika<=25
              UNION 
              SELECT *, 'druhy' as zdroj FROM druhatabulka WHERE verejny='1' AND datum <= NOW() AND (rubrika=1 OR rubrika=5 OR rubrika=7)
              ORDER BY datum DESC 
              LIMIT 50;"
$vysledek =   mysql_query($dotaz);
                  
while ($radek = mysql_fetch_array($vysledek)) 
  { // Tady máme kromě ostatních sloupců k dispozici i proměnnou $radek["zdroj"], ve které nalezneme hodnotu 'prvni', nebo 'druhy';
  }

Podmínky pro výběr dat (datum – např. aby se nezobrazovaly články, které teprve mají být vydány; rubrika) můžete zadat za WHERE v každém dotazu samostatně, tedy i v jednotlivých dotazech různě.
Pokud chcete vypsat např. 50 nejnovějších článků myšleno dohromady z obou zdrojů,
tak „ORDER BY” a LIMIT napište za celé spojení, aby se vybralo opravdu 50 nejnovějších článků z obou zdrojů souhrnně.

V praxi takové spojení využijete např. když budete potřebovat vytvořit sestavu nejnovějších článků ze dvou původně izolovaných časopisů,
pokud mají tabulky stejnou strukturu a jsou ve stejné databázi.
Díky zachování informace o původu článku pak budete vědět, kam máte odkázat na plné znění článku.

Data ze všech tabulek tak jsou sloučena v jednom výsledku
a podle sloupce zdroj poznáte, ze které původní tabulky který řádek pochází.

Pokud těch tabulek potřebujete spojit více, tak nic nebrání tomu, abyste textový řetězec s dotazem vytvořili pomocí for cyklu (nebo foreach nad polem) a konstantu do každého dotazu vkládali automatizovaně (přímo pořadové číslo z proměnné $i, kterou budete počítat průchody cyklu; nebo pomocí pole textových řetězců můžete vkládat názvy).

Více se o sjednocení tabulek pomocí UNION dozvíte na w3c schools.com – SQL UNION Operator (jiný web, nový panel).

Skok nahoru na: Navigační menu
(klávesová zkratka Alt + Shift + horní „5”)

Zaujala Vás tato stránka?

  • Přidat do záložek (Ctrl+D)
  • Sdílet odkaz (vysílačka)Skok nahoru na:
  • Vytisknout (Ctrl+P)
  • Citovat podle ČSN ISO 690

    Tuto stránku

    ADÁMEK, Martin. SQL: Svislé spojení tabulek: se zachováním informace o zdroji každého řádku. Martin Adámek [online]. Náchod / Meziměstí [cit. 2026-07-21]. Dostupné z: https://www.adamek.cz/sw/sql/svisle-spojeni-tabulek

    Celý web

    ADÁMEK, Martin. Martin Adámek [online]. Náchod / Meziměstí [cit. 2026-07-21]. Dostupné z: https://www.adamek.cz

 

 
 

Národní kulturní dědictví

WebArchiv – Stránky archivovány Národní knihovnou ČR Tyto stránky jsou pravidelně archivovány Národní knihovnou ČR pro svou kulturní, vzdělávací, vědeckou, výzkumnou nebo jinou informační hodnotu za účelem dokumentace autentického vzorku českého webu. Jsou součástí kolekce českých webových stránek, které NK ČR hodlá dlouhodobě uchovávat a zpřístupňovat pro budoucí generace. Jejich záznam je součástí České národní bibliografie a katalogu NK ČR.  

 

 
 

Pro rozptýlení

Pase ovčák ovce na zelené louce. Najednou, co to? Po pěšince přijíždí bavorák a za ním oblaka prachu. Za volantem mladý muž v obleku od Broniho, v botách od Gucciho, vázanka D+G a na očích tmavé brýle Ray Ban.
Stisknutím tlačítka stáhne okénko, vykloní se a povídá: „Hej, ovčáku, když ti řeknu, kolik máš ve svém stádě ovcí, dáš mi jednu?”
Ovčák se pomalu podívá na úspěšného mladého muže a řekne klidně: „Ale jo, proč ne?”
Úspěšný mladý muž zaparkuje svůj bavorák, vytáhne notebook Dell, připojí ho ke svému mobilu od AT&T. Pomocí GPS určí svoji polohu, pak se připojí na satelit NASA, kde zadá svoje souřadnice a vyžádá si pořízení řady fotografií s vysokým rozlišením. Pak pomocí Adobe Photoshop otevře pořízené digitální obrázky a exportuje je do zpracovatelského střediska v Hamburku. Během pár vteřin dostane na svůj Palm Pilot zprávu, že obrázky jsou zpracovány a uloženy v databázi SQL. Propojí databázi s Excelem, kde má stovky složitých vzorců, a uploaduje všechna uložená data. Po několika minutách má zpracovaná data. Vytiskne je na miniaturní barevné tiskárně HP LaserJet jako stopadesátistránkovou zprávu a otočí se k ovčákovi: „Máš přesně 1 586 ovcí.”
„To je pravda. Takže podle naší domluvy si můžete vybrat jednu ovci.” Ovčák pozoruje pobaveně mladého muže, jak se snaží napasovat jedno zvíře do kufru auta, a pak povídá: „Když vám řeknu, jaké je vaše povolání, vrátíte mi, co jste si vzal?”
Mladý muž se na vteřinu zamyslí a odpoví: „Jistě.”
„Jste konzultant”, řekne ovčák.
Mladému muži spadne čelist: „To je pravda. Jak jste to uhodl?”
„Vůbec jsem nemusel hádat,” povídá ovčák. „Přijel jste, aniž by pro vás kdokoliv poslal. Chtěl jste si nechat zaplatit za odpověď, kterou jsem už dávno znal - navíc na otázku, na kterou jsem se ani neptal, a přitom o mé práci víte úplný kulový. A teď mi vraťte mého psa…”

 

Pro zamyšlení

Příliš mnoho lidí utrácí peníze, které nevydělali,
za věci, které nepotřebují,
aby udělali dojem na lidi, které nemají rádi.

[Will Smith]