V tomto návode sa naučíte používať príkaz SQL UNION VŠETKO so syntaxou a príkladmi.

Popis

Príkaz SQL UNION ALL sa používa na spojenie skupín výsledkov 2 alebo viacerých príkazov SELECT. Neodstraňuje duplicitné riadky medzi rôznymi príkazmi SELECT (vrátia sa všetky riadky).
Každý príkaz SELECT v UNION ALL musí mať rovnaký počet polí v množinách výsledkov s rovnakými typmi údajov.

Aký je rozdiel medzi UNION a UNION ALL?

  • Operátor UNION odstráni duplicitné riadky.
  • UNION VŠETKO nie odstraňuje duplicitné čiary

Syntax

Syntax pre operátor UNION ALL v SQL.

Možnosti alebo Argument

expression1 , expression2 , expression_n Stĺpce alebo výpočty, ktoré chcete získať tabuľky Tabuľky, z ktorých chcete získať záznamy. Klauzula FROM musí obsahovať aspoň jednu tabuľku. Podmienky WHERE Nepovinné. Podmienky, ktoré musia byť splnené, aby sa položky vybrali

Poznámka

  • Oba SELECT dotazy musia mať rovnaký počet výrazov
  • Zodpovedajúce výrazy musia mať v SELECT dotazoch rovnaký typ údajov. Napríklad: výraz1 musí mať rovnaký typ údajov v prvom aj druhom príkaze SELECT
  • Pozri tiež operátor

Príklad – jedno pole s rovnakým názvom

Pozrime sa, ako použiť príkaz SQL UNION ALL, ktorý vráti jedno pole. V tom jednoduchý príklad pole v oboch príkazoch SELECT bude mať rovnaký názov a typ údajov.
Napríklad.

PgSQL

SELECT Supplier_id

OD dodávateľov

UNION VŠETKO

SELECT Supplier_id

Z objednávok

OBJEDNAŤ PODĽA id_dodávateľa;

Tento príklad UNION ALL SQL vráti id dodávateľa viackrát v sade výsledkov, ak sa rovnaká hodnota objavila v tabuľkách dodávateľov a objednávok. SQL príkaz UNION ALL nie odstráni duplikáty. Ak chcete odstrániť duplikáty, skúste použiť operátor UNION.
Teraz sa pozrime na tento príklad, potom uvedieme nejaké údaje.

A vykonali ste nasledujúci príkaz UNION ALL.

PgSQL

SELECT dodávateľ_id FROM dodávateľov UNION ALL SELECT dodávateľ_id FROM objednávok ORDER BY dodávateľ_id;

Ako môžete vidieť z tohto príkladu, UNION ALL vzal všetky hodnoty Supplier_id z tabuľky dodávateľov, ako aj z tabuľky objednávok a vrátil kombinovanú sadu výsledkov. Duplikáty neboli odstránené, ako môžete vidieť z id dodávateľa 2000, ktorý sa v sade výsledkov vyskytuje dvakrát.

Príklad - rôzne názvy polí

Nie je potrebné, aby zodpovedajúce stĺpce v každom príkaze SELECT mali rovnaký názov, ale musia mať rovnaké zodpovedajúce typy údajov.
Ak vo svojich príkazoch SELECT nemáte rovnaké názvy stĺpcov, je to trochu zložitejšie, najmä ak chcete zoradiť výsledky dotazov pomocou klauzuly ORDER BY.
Pozrime sa, ako použiť operátor UNION ALL s rôznymi názvami stĺpcov a usporiadať výsledky dotazu.
Napríklad.

PgSQL

V tom Príklad SQL UNION ALL, pretože názvy stĺpcov v dvoch príkazoch SELECT sú odlišné, je výhodnejšie odkazovať na stĺpce v klauzule ORDER BY podľa ich pozície v sade výsledkov. V tomto príklade sme zoradili výsledky podľa id_dodávateľa / id_spoločnosti vo vzostupnom poradí, ako je označené ORDER BY 1 . Polia Supplier_id / company_id sú na pozícii č. 1 v sade výsledkov.
Teraz sa pozrime na tento príklad podrobnejšie s údajmi.
Ak ste mali tabuľku dodávateľov vyplnenú nasledujúcimi položkami.

A vykonali ste nasledujúci dotaz obsahujúci UNION ALL.

Už som písal o. A tam výstup jednej tabuľky závisel od obsahu inej. Stáva sa to však, keď potrebujete úplnú nezávislosť výstupu jednej tabuľky od druhej. Všetko, čo chcete, je len získať záznamy z viacerých tabuliek v jednom dotaze, nikdy viac. A pre toto používané v kľúčovom slove SQL UNION.

Poďme na to spolu s vami SQL dotaz pomocou UNION:

SELECT `prihlásenie`, `suma` FROM `zamestnávateľ' UNION SELECT `prihlásenie`, `suma` FROM `personál`;

Tento dotaz vráti prihlásenia a sumy na účtoch všetkých zamestnávateľov a zamestnancov určitej lokality. To znamená, že údaje boli v rôznych tabuľkách, ale ich podobnosť vám ich umožňuje okamžite zobraziť. Odtiaľ, mimochodom, pochádza pravidlo používania Únia žiada: Počet a poradie polí sa musia zhodovať vo všetkých častiach dotazu.

Takéto UNION-časti môže byť veľa, ale najdôležitejšie za posledný UNION, musíte dať bodkočiarku.

Ďalšia dobrá vlastnosť UNION je nedostatok opakovania. Ak je napríklad ten istý človek medzi zamestnancami a medzi zamestnávateľmi, samozrejme, s rovnakou sumou na účte, tak vo vzorke bude nie 2x ale len 1xčo sa zvyčajne vyžaduje. A ak stále potrebujete opakovanie, potom existuje UNION VŠETKO:

SELECT `prihlásenie`, `suma` FROM `zamestnávateľov` UNION ALL SELECT `prihlásenie`, `suma` FROM `personál`;

Páči sa ti to v dotaze SQL sa používa pomerne jednoduchý operátor UNION, čo zjednodušuje postup zobrazovania údajov rovnakého typu z mnohých tabuliek naraz, čo bude mať zase veľmi dobrý vplyv na výkon.

Je čas hovoriť o agregácii údajov pomocou návrhových nástrojov únie a zväz všetkých, pretože to je niekedy veľmi užitočné a niekedy to nie je možné bez použitia takejto konštrukcie. Príklady budú napísané v DBMS MS SQL 2008 pomocou jazyka SQL.

A rád by som začal tým, že vy a ja sme už zvážili veľa príkladov písania žiadostí o SQL, ako napríklad príkaz SQL select alebo použitie funkcií reťazcov SQL, pokrývali aj programovanie plpgsql a transact-sql, ako napríklad Ako napísať funkciu v PL/pgSQL a Transact-sql - tabuľkové funkcie a dočasné tabuľky.

Na vyššie uvedené články som len nepoukázal, ale upozornil som ich, pretože pre lepšie pochopenie a osvojenie si dnešnej lekcie potrebujete základné znalosti (toto je stránka pre začínajúcich programátorov), ktoré môžete získať z vyššie uvedeného materiálu .

A tak začnime. A najprv sa pozrime, čo sú tieto zväzky a zväzky všetkých operátorov.

Čo je UNION a UNION ALL v SQL?

  • UNION je príkaz SQL na pripojenie k množine výsledkov viacerých dotazov a daný operátor vypíše len jedinečné riadky v požiadavkách, t.j. napríklad skombinujete dva dotazy a každý z nich obsahuje rovnaké údaje, inými slovami, úplne identické, a operátor zjednotenia ich spojí do jedného riadku, aby nevznikali duplikáty;
  • UNION VŠETKO- ide o SQL príkaz na spojenie výslednej množiny údajov viacerých dopytov, ale tento príkaz zobrazí úplne všetky riadky, dokonca aj duplikáty.

Predpoklady pre spojenie a spojenie všetkých operátorov

  1. Sada polí by mala byť rovnaký vo všetkých dopytoch, t.j. počet polí v každom dotaze, ktoré budú kombinované pomocou konštrukcie union alebo union all, musí byť rovnaký;
  2. Typy údajov polia sa musia zhodovať aj v každej žiadosti, t.j. ak napríklad chcete napísať jeden dotaz, v ktorom je typ údajov int a v druhom dotaze je typ údajov varchar, potom sa váš dotaz nevykoná a v okne dotazu sa zobrazí chyba;
  3. V prípade triedenia operátor zoradiť podľa možno len špecifikovať po poslednej žiadosti.

Teraz si povedzme o prípadoch, v ktorých by sme mohli potrebovať použiť tieto operátory. Napríklad máte niekoľko databáz s podobnou štruktúrou, pričom každá z nich bola vytvorená napríklad pre pobočku a tieto údaje potrebujete skombinovať, aby ste mohli podávať správy o všetkých pobočkách manažmentu a najjednoduchší spôsob, ako to urobiť, je na písanie dotazov v SQL, z ktorých každý bude odkazovať na iné bázy, a skombinovať ich prostredníctvom zjednotenia alebo zjednotenia celej konštrukcie. Niekedy je tiež potrebné skombinovať dáta v jednej databáze tak, že sa to nedá realizovať s bežnými odbormi a musíte použiť union. Prečo hovorím „musím“ áno, pretože tento dizajn výrazne zvyšuje čas vykonania dotazu, ak je napríklad veľa údajov a nie je potrebné ich zneužívať.

Dosť bolo teórie, prejdime k praxi.

Poznámka! Ako už bolo spomenuté, žiadosti budeme písať manažérske štúdio pre SQL Server 2008

Príklady použitia union a union all

Najprv si vytvorte dve jednoduché tabuľky test_table a test_table_2

VYTVORIŤ TABUĽKU ( IDENTITA(1,1) NIE JE NULL, (18, 0) NULL, (50) NULL, OBMEDZENIE PRIMÁRNYCH KĽÚČOV V KLUSTERE (ASC) S (PAD_INDEX = VYPNUTÉ, STATISTICS_NORECOMPUTE = VYPNUTÉ, IGNORE_DUP_KEYS = VYPNUTÉ, VYPNUTÉ, VYPNUTÉ = ON) ON ) ON GO SET ANSI_PADDING OFF GO --a druhá tabuľka VYTVORIŤ TABUĽKU ( IDENTITY(1,1) NOT NULL, (18, 0) NULL, (50) NULL, OBMEDZENIE PRIMÁRNYCH KĽÚČOV V KLUSTERE (ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON ) ON GO SET ANSI_PADDING OFF GO

Sú napríklad rovnaké, len majú iné mená. Vyplnil som ich nasledujúcimi informáciami:

Teraz napíšme dotaz, ktorý spojí výsledné dáta do jedného, ​​napríklad cez union. Syntax je veľmi jednoduchá:

Žiadosť 1 zjednotenie Žiadosť 2 zjednotenie Žiadosť 3 atď.

Tu je žiadosť:

select number, text from test_table union select number, text from test_table_2

Ako vidíte, zobrazilo sa len 5 riadkov, keďže prvý riadok v prvej požiadavke a prvý riadok v druhej požiadavke sú rovnaké, takže sú zlúčené.

Teraz poďme spojiť cez union all

Tu je žiadosť:

select number, text from test_table union all select number, text from test_table_2

Všetky riadky sú tu už zobrazené, pretože sme zadali zjednotenie všetkých.

A teraz sa pozrime, aké chyby môžu byť aj v tomto jednoduchom dotaze. Napríklad sme zmiešali postupnosť polí:

Alebo sme v prvej žiadosti špecifikovali dodatočné pole, ale v druhej sme to neurobili.

Tiež napríklad pri použití objednávky podľa:

Tu sme špecifikovali triedenie v každej požiadavke, ale bolo potrebné len v poslednej, napr.

Vyberte číslo, text z test_table Union all vyberte číslo, text z test_table_2 zoraďte podľa čísla

A nakoniec som chcel hovoriť o jednom triku, ktorý sa dá použiť, keď je napríklad stále potrebné zobraziť nejaké pole v jednej požiadavke, ale v iných tam nie je alebo to jednoducho nie je potrebné, na to môžete napísať nasledujúca žiadosť:

Vyberte id ,číslo, text z únie test_table all vyberte "", číslo, text z test_table_2

tie. ako vidíte, práve tam, kde by malo byť pole prázdne a požiadavka bude fungovať dobre, napríklad:

Asi všetko, čo som chcel povedať o dizajne zväz a zväz všetkých jazyk SQL Povedal som, že ak máte otázky týkajúce sa používania týchto operátorov, opýtajte sa ich v komentároch. Veľa štastia!

Väčšina SQL dotazy jeden príkaz sa používa na vrátenie údajov z jednej alebo viacerých tabuliek. SQL tiež umožňuje spustiť viacero samostatných dotazov súčasne a zobraziť výsledok ako jeden súbor údajov. Takéto kombinované dotazy sa zvyčajne nazývajú kombinácie alebo zložité otázky.

1. Pomocou operátora UNION

Žiadosti v jazyku SQL v kombinácii s operátorom UNION. Ak to chcete urobiť, musíte špecifikovať každú žiadosť VYBRAŤ a umiestnite medzi ne kľúčové slovo UNION. Obmedzenia počtu používaných operátorov UNION v jednej všeobecnej žiadosti nie je. V predchádzajúcej časti sme si to všimli Prístup neschopný vytvoriť kompletný vonkajší spoj , teraz uvidíme, ako to cez operátora dosiahneme UNION.

VYBRAŤ *
FROM Sumproduct LEFT PRIPOJTE SA K Predajcom ON Sumproduct.City = Sellers.City
UNION
VYBRAŤ *

FROM Sumproduct SPRÁVNE PRIDAJTE SA K Predajcom NA Sumproduct.City = Predajcovia.Mesto

Vidíme, že dotaz zobrazil všetky stĺpce z prvej tabuľky – aj z druhej, bez ohľadu na to, či sa všetky záznamy zhodujú v inej tabuľke.

Treba tiež poznamenať, že v mnohých prípadoch namiesto UNION môžeme využiť ponuku KDE s mnohými podmienkami a získate podobný výsledok. Avšak vzhľadom na UNION záznamy vyzerajú stručnejšie a zrozumiteľnejšie. Pri písaní kombinovaných dopytov musíte tiež dodržiavať určité pravidlá:

  • žiadosť UNION musí zahŕňať dvoch alebo viacerých operátorov VYBRAŤ oddelené kľúčovým slovom UNION(t. j. ak dotaz používa štyri príkazy SELECT, potom by mali byť tri Kľúčové slová UNION)
  • každej žiadosti v operátorovi UNION musia mať rovnaké stĺpce, výrazy alebo agregáty a musia byť uvedené v rovnakom poradí
  • dátové typy stĺpcov musia byť kompatibilné. Nemusia byť rovnakého typu, ale musia byť podobného typu, aby mohli DBMS by ich mohli jednoznačne konvertovať (môže ísť napríklad o rôzne číselné dátové typy resp odlišné typy termíny).

2. Povoliť alebo zakázať opakované riadky

Žiadosť od UNION automaticky odstráni všetky duplicitné riadky zo sady výsledkov dotazu (to znamená, že sa správa ako KDE s viacerými podmienkami v jednom vyhlásení VYBRAŤ). Toto správanie operátora UNIONštandardne, ale ak chceme, môžeme to zmeniť. Na to by sme mali použiť operátora UNION VŠETKO namiesto UNION.

3. Triedenie výsledkov kombinovaných dopytov

Výsledky vykonania výpisu VYBRAŤ zoradené podľa vety ZORADIŤ PODĽA. Pri kombinácii dopytov s UNION len jedna ponuka ZORADIŤ PODĽA môžu byť použité a musia byť zahrnuté v poslednom výpise VYBRAŤ. V skutočnosti nemá v praxi veľký zmysel triediť časť výsledkov v jednom poradí a druhú časť v inom poradí. Takže niekoľko návrhov ZORADIŤ PODĽA nie je dovolené podať žiadosť.

Operátor SQL UNION je navrhnutý tak, aby kombinoval výsledné databázové tabuľky získané pomocou slova SELECT. Podmienkou spojenia výsledných tabuliek je zhoda počtu, poradia a dátového typu stĺpcov. ORDER BY by sa malo použiť na výsledok spojenia a umiestniť ho iba na koniec viacdielneho dotazu. Operátor UNION má nasledujúcu syntax:

SELECT COLUMNAMES (1..N) FROM TABLE_NAME UNION SELECT COLUMN_NAMES (1..N) FROM TABLE_NAME

V tomto konštrukte môžu alebo nemusia mať zlučované dotazy podmienky v klauzule WHERE. Pomocou operátora UNION môžete kombinovať dotazy na získanie údajov z tej istej tabuľky aj z rôznych tabuliek.

Pri použití operátora UNION bez slova ALL výsledok neobsahuje duplikáty, ale so slovom ALL obsahuje duplikáty.

Súčty a jednotlivé hodnoty v jednej tabuľke pomocou príkazu SQL UNION

Jedným dotazom môžete zobraziť jednotlivé hodnoty stĺpcov z tabuľky, napríklad počet rokov odpracovaných zamestnancami spoločnosti, ich mzdy a iné. Ďalšia požiadavka - používanie agregované funkcie- môžete získať napríklad výšku platov, ktoré dostávajú zamestnanci oddelení alebo obsadzovaní určitých pozícií, alebo priemerný počet rokov praxe (pri takýchto dopytoch sa používa zoskupovanie pomocou operátora GROUP BY).

Čo ak však potrebujeme získať súhrn všetkých individuálnych hodnôt aj celkových hodnôt v jednej tabuľke? Tu prichádza na pomoc operátor SQL UNION, pomocou ktorého sa kombinujú dva dotazy. Usporiadanie sa musí použiť na výsledok spojenia pomocou klauzuly ORDER BY. Prečo je to potrebné, bude lepšie pochopené z príkladov.

Príklad 1 Firemná databáza obsahuje tabuľku Zamestnancov, ktorá obsahuje údaje o zamestnancoch firmy. Má stĺpce Plat (plat), Práca (pozícia) a Roky (odpracovaná doba). Prvý dotaz vráti jednotlivé platy zoradené podľa pozície:

VYBERTE SI Meno, Práca, Plat OD OBJEDNÁVKY PERSONÁLU PODĽA práce

názovprácuPlat
SandersMgr18357.5
MarenghiMgr17506.8
PernalPredaj18171.2
DoktorPredaj12322.4
faktorPredaj16228.7

Druhý dotaz vráti celkový plat podľa pozície. Tento dotaz už pripravujeme na spojenie s prvým, takže si zapamätáme, že podmienkou spojenia je rovnaký počet stĺpcov, zhoda ich názvov, poradie a dátové typy. Preto do tabuľky so súčtami zaraďujeme aj stĺpec Názov s ľubovoľnou hodnotou „Z-TOTAL“:

VYBERTE "Z-TOTAL" AKO Meno, Práca, SÚČET (Plat) AKO Mzda OD SKUPINY ZAMESTNANCOV PODĽA práce

Výsledkom dotazu bude nasledujúca tabuľka:

názovprácuPlat
Z-CELKOMMgr35864.3
Z-CELKOMPredaj46722.3

Teraz skombinujme dotazy pomocou operátora UNION a aplikujme operátor ORDER BY na výsledok spojenia. Mal by byť zoskupený do dvoch stĺpcov: job (Job) a meno (Name), takže riadky s celkovými (celkovými) hodnotami, v ktorých je hodnota názvu "Z-TOTAL", sú pod riadkami s jednotlivými hodnotami. Kombinovanie výsledkov dotazu bude nasledovné:

(VYBERTE meno, prácu, plat OD ZAMESTNANCOV ) ODBOR (VYBERTE "Z-CELKOM" AKO Meno, Práca, SÚČET (Plat) AKO Mzda OD ZAMESTNANCOV SKUPINY PODĽA práce) OBJEDNAŤ PODĽA práce, mena

Výsledkom vykonania dotazu s operátorom UNION bude nasledujúca tabuľka, v ktorej každý prvý riadok v každej skupine pozícií bude obsahovať celkovú mzdu zamestnancov pracujúcich na tejto pozícii:

názovprácuPlat
MarenghiMgr17506.8
SandersMgr18357.5
Z-CELKOMMgr35864.3
DoktorPredaj12322.4
faktorPredaj16228.7
PernalPredaj18171.2
Z-CELKOMPredaj46722.3

Napíšte otázky pomocou UNION sami a potom si pozrite riešenie

Príklad 2Údaje sú rovnaké ako v príklade 1, ale úloha je o niečo komplikovanejšia. V jednej tabuľke je potrebné zobraziť nielen jednotlivé mzdy zoradené podľa pozícií a celkové mzdy podľa pozícií, ale aj celkové mzdy za všetkých zamestnancov.

Príklad 3 Firemná databáza obsahuje tabuľku Zamestnancov, ktorá obsahuje údaje o zamestnancoch firmy. Má stĺpce Meno (priezvisko), Oddelenie (číslo oddelenia) a Roky (dĺžka služby).

názovoddelenierokov
Sanders20 7
Pernal20 8
Marenghi38 5
Doktor20 5
faktor38 8

Zobrazte v jednej tabuľke priemernú dĺžku služby podľa oddelení a jednotlivé hodnoty doby trvania služby zamestnancov, zoskupené podľa čísel oddelení.

Ďalšie prípady spájania dotazov na rovnakú tabuľku pomocou operátora SQL UNION

Príklad 4 Firemná databáza obsahuje tabuľku Zamestnancov, ktorá obsahuje údaje o zamestnancoch firmy. Má stĺpce Plat (plat), Práca (pozícia) a Roky (odpracovaná doba). Prvá požiadavka je potrebná na získanie údajov o zamestnancoch, mzda ktorých je viac ako 21 000:

Výsledkom dotazu bude nasledujúca tabuľka:

Teraz potrebujeme údaje, ktoré kombinujú výberové kritériá použité v týchto dvoch dopytoch. Dopyty kombinujeme pomocou operátora UNION:

Výsledkom vykonania dotazu s operátorom UNION bude nasledujúca tabuľka:

IDnázov
10 Sanders
30 Marenghi
100 Plotz
140 Fraye
160 Molinare
240 Daniels
260 Jones

Dotaz s operátorom UNION môže vrátiť viac stĺpcov, dôležité je, opakujeme, aby sa v kombinovaných dopytoch zhodoval počet stĺpcov, ich poradie a dátové typy.

Najprv získajme údaje o kategóriách a častiach kategórií reklám, ktoré majú viac ako 100 reklám týždenne. Píšeme nasledujúci dotaz:

Výsledkom dotazu bude nasledujúca tabuľka:

Výsledkom dotazu bude nasledujúca tabuľka:

Teraz chceme získať údaje, ktoré zodpovedajú kritériám prvého aj druhého dotazu. Dopyty kombinujeme pomocou operátora UNION:

Výsledkom dotazu bude nasledujúca tabuľka:

Kombinovanie výsledkov dotazu na dve tabuľky pomocou operátora SQL UNION

Doteraz sme sa zaoberali dopytmi UNION, ktoré kombinujú výsledky z tej istej tabuľky. Teraz spojíme výsledky z dvoch tabuliek.

Príklad 6 Existuje databáza skladu stavebných materiálov. Má tabuľku s údajmi o tapetách. Tabuľka Vinil obsahuje údaje o vinylových tapetách, tabuľka Papier - o papierových tapetách. Údaje o cenách tapiet je potrebné zistiť z jednej a druhej tabuľky.

Ak chcete získať neopakujúce sa údaje o cene vinylových tapiet, vytvoríme dopyt so slovom DISTINCT:

VYBERTE ODLIŠNÚ CENU OD VINILU

Výsledkom dotazu bude nasledujúca tabuľka:

Teraz urobme kombinovaný dotaz s operátorom UNION:

VYBERTE ODDIEL. Cena OD VINIL UNION VYBERTE ODDIEL. Cena Z PAPIERA

Keďže nepoužívame slovo ALL, nebudú existovať žiadne duplicitné hodnoty pre 400, 500 a 530. Výsledkom dotazu bude nasledujúca tabuľka:

cena
300
320
360
400
430
500
530
610
720
800
850

Príklad 7 Databáza a tabuľky sú rovnaké ako v predchádzajúcom príklade.

Chcete získať všetky údaje o cene, vrátane tých opakujúcich sa. Dotaz na spojenie výsledkov pomocou operátora UNION bude podobný dotazu v predchádzajúcom príklade, ale namiesto len UNION napíšeme UNION ALL:

VYBERTE ODDIEL. Cena OD VINIL UNION VŠETKY VYBERTE ODLIŠ. Cena Z PAPIERA

Výsledkom dotazu bude nasledujúca tabuľka:

cena
300
320
360
400
400
430
500
500
530
530
610
720
800
850

Pomocou operátora SQL UNION môžete kombinovať jednoduché dotazy a dopyty obsahujúce poddotazy (vnorené dopyty). Zoberme si zodpovedajúci príklad.

Príklad 8 Existuje databáza "Theater". Jeho tabuľka Play obsahuje údaje o inscenáciách (tituly - v stĺpci Name), v tabuľke Director - údaje o režiséroch (v stĺpci Fname - krstné meno, v stĺpci Lname - priezvisko). Primárny kľúč tabuľky Director je dir_id – identifikačné číslo riaditeľa. Dir_id je tiež cudzí kľúč tabuľky Play, odkazuje na primárny kľúč tabuľky Director. Vyžaduje sa premietanie predstavení v réžii Johna Bartona a Trevora Nunna.

Riešenie. Spojme výsledky dvoch dopytov – jeden vracia výkony režiséra Johna Bartona, druhý – režiséra Trevora Nunna. A každý z týchto kombinovaných dopytov do tabuľky Play sa robí s poddotazom do tabuľky Director, ktorý vracia dir_id podľa mena a priezviska režiséra. Každý vonkajší dotaz preberá hodnotu kľúča dir_id z poddotazu a vracia názvy produkcií (Názov):

Relačné databázy a jazyk SQL