Kombinujte řádky tabulek pomocí UNION


kombinujte řádky tabulek pomocí UNION

v této lekci budeme hovořit o klauzuli unie. Pomocí klauzule unie můžete kombinovat řádky tabulek ze dvou různých dotazů do jednoho výsledku. Na rozdíl od spojit, který kombinuje sloupce z různých tabulek, unie kombinuje řádky z různých tabulek. Zde je ilustrace toho, jak vypadá unie

odbory

všechny příklady této lekce jsou založeny na Microsoft SQL Server Management Studio A databázi AdventureWorks2012., Můžete začít používat tyto bezplatné nástroje pomocí mého průvodce Začínáme používat SQL Server.

V SQL toto prohlášení vypadá jako

SELECT columnlistFROM table1UNIONSELECT columnlistFROM table2

V zájmu unie dvou tabulek existuje několik požadavky:

  1. počet sloupců musí být stejné pro oba příkazy select.
  2. sloupce musí mít v pořadí stejný datový typ.

když jsou řádky kombinovány, jsou odstraněny duplicitní řádky. Chcete-li, aby všechny řádky z obou výsledků select prohlášení používat všechny klíčové slovo.,

příklady

Union two tables

Předpokládejme, že jste byli požádáni o poskytnutí seznamu všech kategorií produktů a podkategorií AdventureWorks2012. K tomu můžete napsat dva samostatné dotazy a poskytovat dva samostatné výsledky, jako jsou dvě tabulky, nebo můžete použít UNII bodě dodat jeden kombinovaný výsledek:

SELECT C.NameFROM Production.ProductCategory AS CUNION ALLSELECT S.NameFROM Production.ProductSubcategory AS S

Z toho dostanete kombinovaný seznam jmen, ale předpokládám, že jste chtěl vědět, který název byl kategorií versus podkategorií., K tomu můžete přidat nový sloupec s uvedením kategorie typu:

SELECT 'category', C.NameFROM Production.ProductCategory AS CUNION ALLSELECT 'subcategory', S.NameFROM Production.ProductSubcategory AS S

Unie versus Unie

rozdíl mezi UNII a UNIE je, že se UNIE vrátí unikátní sadu řádků z unie výsledku; vzhledem k tomu, UNION ALL vrátí všechny řádky.

příklad:

SELECT person.Address.CityFROM person.Address

vrací 19614 řádků.

SELECT person.Address.CityFROM person.AddressUNIONSELECT person.Address.CityFROM person.Address

vrací 575 řádků, což je počet odlišných názvů měst v tabulce. Running UNION All vrací celou sadu názvů měst dvakrát:

SELECT person.Address.CityFROM person.AddressUNION ALLSELECT person.Address.CityFROM person.Address

vrací 39228 řádků.,

jak můžete vidět, je velký rozdíl s použitím all qualifier. Pokud nejsou použity, výsledky jsou odlišné hodnoty. Duplikáty jsou eliminovány nejen mezi řádky z každého výsledku, ale také zevnitř.

Union three tables

Předpokládejme, že vedení chce kombinovaný seznam lidí, dodavatelů a názvů obchodů identifikovaných podle zdroje.

k tomu vytvoříme tři samostatné dotazy a poté je pomocí klauzule union sestavíme. Poté si seznam objednáme.,

na první pohled si můžete myslet, že objednávka podle klauzule by se vztahovala pouze na poslední vybrané prohlášení, ale ve skutečnosti se vztahuje na všechny výsledky vrácené unií. Databázový stroj nejprve zpracuje všechna prohlášení unie a poté příkaz.

Pokud máte pochybnosti o pořadí zpracování, můžete použít závorku „() “ pro kontrolu pořadí hodnocení, stejně jako můžete s výrazy. Zde je to, co by prohlášení obecně vypadalo s závorkou:

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Přejít k navigační liště