Nastavit operace (SQL) - Set operations (SQL) - Wikipedia
Nastavit operace umožňuje sloučit výsledky více dotazů do jedné sady výsledků.[1] Zahrnout operátory sady SVAZ
, PROSÍT
, a AŽ NA
.
Operátor UNION
v SQL the SVAZ
klauzule kombinuje výsledky dvou dotazů SQL do jednoho stůl všech shod řádky. Výsledkem těchto dvou dotazů musí být stejný počet sloupce a kompatibilní typy dat abychom se sjednotili. Všechny duplicitní záznamy jsou automaticky odstraněny, pokud UNION ALL
se používá.
SVAZ
může být užitečné v datový sklad aplikace, kde tabulky nejsou dokonalé normalizováno.[2] Jednoduchým příkladem by byla databáze s tabulkami prodej2005
a prodej 2006
které mají identické struktury, ale jsou odděleny z důvodu výkonu. A SVAZ
dotaz může kombinovat výsledky z obou tabulek.
Všimněte si, že UNION ALL
nezaručuje pořadí řádků. Řádky z druhého operandu se mohou objevit před, po nebo smíšené s řádky z prvního operandu. V situacích, kdy je požadována konkrétní objednávka, SEŘADIT PODLE
musí být použito.
Všimněte si, že UNION ALL
může být mnohem rychlejší než obyčejný SVAZ
.
Příklady
Vzhledem k těmto dvěma tabulkám:
osoba | množství |
---|---|
Joe | 1000 |
Alexi | 2000 |
Bob | 5000 |
osoba | množství |
---|---|
Joe | 2000 |
Alexi | 2000 |
Zach | 35000 |
Provedení tohoto prohlášení:
VYBRAT * Z prodej2005SVAZVYBRAT * Z prodej2006;
přináší tuto sadu výsledků, i když se pořadí řádků může lišit, protože ne SEŘADIT PODLE
doložka byla dodána:
osoba | množství |
---|---|
Joe | 1000 |
Alexi | 2000 |
Bob | 5000 |
Joe | 2000 |
Zach | 35000 |
Všimněte si, že pro Joea existují dva řádky, protože tyto řádky jsou v jejich sloupcích odlišné. Pro Alexa existuje pouze jeden řádek, protože tyto řádky nejsou pro oba sloupce odlišné.
UNION ALL
poskytuje různé výsledky, protože nebude eliminovat duplikáty. Provedení tohoto prohlášení:
VYBRAT * Z prodej2005SVAZ VŠECHNOVYBRAT * Z prodej2006;
by poskytlo tyto výsledky, což by opět umožnilo rozptyl pro nedostatek SEŘADIT PODLE
prohlášení:
osoba | množství |
---|---|
Joe | 1000 |
Joe | 2000 |
Alexi | 2000 |
Alexi | 2000 |
Bob | 5000 |
Zach | 35000 |
Diskuse o plné vnější spojení má také příklad, který používá SVAZ
.
Operátor INTERSECT
SQL PROSÍT
operátor vezme výsledky dvou dotazů a vrátí pouze řádky, které se objeví v obou sadách výsledků. Pro účely duplikátu odstranění PROSÍT
operátor nerozlišuje mezi NULL
. The PROSÍT
operátor odstraní duplicitní řádky z konečné sady výsledků. The PROSÍM VŠE
operátor neodstraní duplicitní řádky z konečné sady výsledků, ale pokud se řádek objeví Xkrát v prvním dotazu a Y krát ve druhém, objeví se min (X, Y) krát v sadě výsledků.
Příklad
Následující příklad PROSÍT
Dotaz vrátí všechny řádky z tabulky Objednávky, kde je množství mezi 50 a 100.
VYBRAT *Z ObjednávkyKDE Množství MEZI 1 A 100PROSÍTVYBRAT *Z ObjednávkyKDE Množství MEZI 50 A 200;
KROMĚ operátora
SQL AŽ NA
operátor vezme odlišné řádky jednoho dotazu a vrátí řádky, které se neobjeví v druhé sadě výsledků. Pro účely odstranění řádků a odstranění duplikátů se AŽ NA
operátor nerozlišuje mezi NULL
. The KROMĚ VŠE
operátor neodstraní duplikáty, ale pokud se řádek objeví X krát v prvním dotazu a Y krát ve druhém, objeví se max (X - Y, 0) krát ve výsledkové sadě.
Zejména platforma Oracle poskytuje MÍNUS
operátor, který je funkčně ekvivalentní s Standard SQL KROMĚ ROZDÍLU
operátor [1].
Příklad
Následující příklad AŽ NA
Dotaz vrátí všechny řádky z tabulky Objednávky, kde je množství mezi 1 a 49 a ty s počtem mezi 76 a 100.
Formulováno jiným způsobem; dotaz vrátí všechny řádky, kde je množství mezi 1 a 100, kromě řádků, kde je množství mezi 50 a 75.
VYBRAT *Z ObjednávkyKDE Množství MEZI 1 A 100AŽ NAVYBRAT *Z ObjednávkyKDE Množství MEZI 50 A 75;
Příklad
Následující příklad je ekvivalentní výše uvedenému příkladu, ale bez použití AŽ NA
operátor.
VYBRAT o1.*Z ( VYBRAT * Z Objednávky KDE Množství MEZI 1 A 100) o1VLEVO, ODJET PŘIPOJIT SE ( VYBRAT * Z Objednávky KDE Množství MEZI 50 A 75) o2NA o1.id = o2.idKDE o2.id JE NULA
Viz také
Reference
- ^ „Operátoři UNIE [VŠECHNY], PROTÍŽÍ SE, MÍNUS“. Věštec. Citováno 14. července 2016.
- ^ "A
UNION ALL
technika zobrazení pro správu údržby a výkonu ve vašem prostředí velkého datového skladu ... totoUNION ALL
technika zachránila mnoho mých klientů s problémy souvisejícími s časově citlivými návrhy databází. Tyto databáze obvykle mají extrémně nestálý aktuální časový rámec, měsíc nebo den a starší data jsou zřídka aktualizována. Pomocí různých alokací DASD kontejnerů, tabulkových prostorů, tabulek a definic indexů lze nastavení vyladit pro konkrétní aspekty výkonu pro tyto různé úrovně volatility a situace četnosti aktualizací." Možnosti návrhu tabulky Terabyte Data Warehouse - Část 2 (URL zpřístupněno 25. července 2006)
externí odkazy
- Dokumentace MSDN pro UNION v Transact-SQL pro SQL Server
- Pojmenování vybraných položek seznamu v nastavených operacích
- UNION v MySQL s příklady
- UNION v MySQL
- Klauzule UNION v PostgreSQL
- SQL UNION a UNION ALL
- Pořadí řazení ve výpisu UNION
- Návrh datového toku, který načte tabulku skladu
- Dokumentace Oracle 11g pro UNION (ALL), INTERSECT a MINUS
- Operátoři sady SQL