PostgreSQL Union, Union VŠECHNY s příklady

⚡ Chytré shrnutí

PostgreSQL Funkce UNION kombinuje výsledky dvou nebo více příkazů SELECT do jedné sady výsledků a odstraňuje duplicitní řádky, zatímco UNION ALL zachovává všechny řádky, což nabízí rychlejší variantu v situacích, kdy na duplicitách nezáleží.

  • 🔗 Kombajn: Příkaz UNION sloučí řádky z více příkazů SELECT do jedné sady výsledků.
  • 🧹 Duplikáty: Příkaz UNION odstraní duplicitní řádky, zatímco příkaz UNION ALL zachová všechny odpovídající řádky.
  • 📐 Pravidla: Každý příkaz SELECT musí vrátit stejný počet sloupců s kompatibilními datovými typy.
  • ↕️ SEŘADIT PODLE: Jediný příkaz ORDER BY na konci seřadí kombinovanou výslednou sadu.
  • Výkon: Příkaz UNION ALL běží rychleji, protože přeskakuje krok odstraňování duplicit.
  • 🤖 Nápověda s umělou inteligencí: Asistenti s umělou inteligencí zarovnávají sloupce a vybírají mezi možnostmi UNION a UNION ALL.

PostgreSQL UNION a UNION VŠECHNY

Co je to PostgreSQL Svaz?

Jedno PostgreSQL Operátor UNION se používá pro kombinování sad výsledků z více než jednoho příkazu SELECT do jedné sady výsledků. Všechny duplicitní řádky z výsledků příkazů SELECT jsou odstraněny. Operátor UNION pracuje za dvou podmínek:

  • Dotazy SELECT musí vracet stejný počet sloupců.
  • Datové typy všech odpovídajících sloupců musí být kompatibilní.

Operátor UNION se běžně používá ke kombinování dat ze souvisejících tabulek, které nebyly dokonale normalizovány.

Syntax

SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)]
UNION
SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)];

Zde je vysvětlení výše uvedených parametrů:

Výraz_1, výraz_2, … výraz_n jsou výpočty nebo sloupce, které potřebujete načíst.

Tabulky jsou tabulky, ze kterých potřebujete získat záznamy.

Podmínka(y) WHERE jsou podmínky, které musí být splněny, aby bylo možné záznamy načíst.

Poznámka: Protože operátor UNION nevrací duplikáty, použití operátoru UNION DISTINCT nebude mít žádný vliv na výsledky.

PostgreSQL svaz

Operátor UNION odstraňuje duplikáty stejným způsobem jako VYBERTE ROZDÍL ano. Ukažme si to. Máme databázi s názvem Demo s následujícími tabulkami:

Rezervovat:

PostgreSQL svaz

Cena:

PostgreSQL svaz

Spustíme následující příkaz:

SELECT id
FROM Book
UNION
SELECT id
FROM Price;

Příkaz vrátí následující:

PostgreSQL svaz

Sloupec id se zobrazí v tabulkách Kniha i Cena. Ve výsledku se však objeví pouze jednou. Důvod je ten PostgreSQL Operátor UNION nevrací duplikáty.

PostgreSQL Union All

Tento operátor kombinuje sady výsledků z více než jednoho příkazu SELECT bez odstranění duplikátů. Operátor vyžaduje, aby každý příkaz SELECT měl podobný počet polí ve výsledných sadách podobných datových typů.

Syntaxe:

SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)]
UNION ALL
SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)];

Zde je vysvětlení výše uvedených parametrů:

Výraz_1, výraz_2, … výraz_n jsou výpočty nebo sloupce, které potřebujete načíst.

Tabulky jsou tabulky, ze kterých potřebujete získat záznamy.

Podmínka(y) WHERE jsou podmínky, které musí být splněny, aby bylo možné záznamy načíst.

Poznámka: Oba příkazy SELECT musí mít stejný počet výrazů.

Použijeme následující tabulky:

Rezervovat:

PostgreSQL Union All

Cena:

PostgreSQL Union All

Spusťte následující příkaz:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

Mělo by vrátit následující:

PostgreSQL Union All

Duplikáty nebyly odstraněny.

SEŘADIT PODLE

Jedno PostgreSQL Operátor UNION lze použít společně s klauzulí ORDER BY k uspořádání výsledků dotazu. Abychom to demonstrovali, použijeme následující tabulky:

Cena:

SEŘADIT PODLE

Cena 2:

SEŘADIT PODLE

Zde je příkaz, který ukazuje, jak používat operátor UNION spolu s klauzulí ORDER BY:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price;

Příkaz vrátí následující:

SEŘADIT PODLE

Záznamy byly seřazeny podle sloupce ceny. Klauzule standardně řadí záznamy ve vzestupném pořadí. Chcete-li je seřadit sestupně, přidejte klauzuli DESC, jak je uvedeno níže:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price DESC;

Příkaz vrátí následující:

SEŘADIT PODLE

Záznamy byly seřazeny podle sloupce ceny v sestupném pořadí.

Kdy použít Union a kdy Union All?

Operátor UNION použijte, pokud máte více tabulek s podobnou strukturou, ale z nějakého důvodu rozdělených. Je vhodný, když potřebujete odstranit nebo eliminovat duplicitní záznamy.

Operátor UNION ALL použijte, pokud nepotřebujete odstranit nebo eliminovat duplicitní záznamy.

Pomocí pgAdmin

Nyní se podívejme, jak se všechny tři akce provádějí pomocí pgAdmin.

Jak používat PostgreSQL Sjednocení pomocí pgAdmin

Následuje podrobný postup, jak jej používat PostgreSQL UNION přes pgAdmin:

Krok 1) Přihlaste se ke svému účtu pgAdmin.

Krok 2) V navigačním panelu vlevo klikněte na Databáze a poté na Demo.

Použijte  PostgreSQL Sjednocení pomocí pgAdmin

Krok 3) Zadejte dotaz v editoru dotazů:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price DESC;

Krok 4) Klepněte na tlačítko Spustit.

Použijte  PostgreSQL Sjednocení pomocí pgAdmin

Mělo by vrátit následující:

Použijte  PostgreSQL Sjednocení pomocí pgAdmin

Union All

Krok 1) Přihlaste se ke svému účtu pgAdmin.

Krok 2) V navigačním panelu vlevo klikněte na Databáze a poté na Demo.

Použijte  PostgreSQL Sjednotit vše pomocí pgAdmin

Krok 3) Zadejte dotaz v editoru dotazů:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

Krok 4) Klepněte na tlačítko Spustit.

Použijte  PostgreSQL Sjednotit vše pomocí pgAdmin

Mělo by vrátit následující:

Použijte  PostgreSQL Sjednotit vše pomocí pgAdmin

SEŘADIT PODLE

Operátor UNION ALL lze zkombinovat s klauzulí ORDER BY a seřadit výsledky ve výsledné sadě. Například:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price
ORDER BY id;

Příkaz vrátí následující:

Použijte  PostgreSQL OBJEDNÁVEJTE pomocí pgAdmin

Výsledky byly objednány.

Stáhněte si databázi použitou v tomto kurzu

Nejčastější dotazy

Funkce UNION ALL je rychlejší, protože jednoduše zřetězuje řádky. Funkce UNION musí sloučené řádky seřadit nebo hašovat, aby se odstranily duplikáty, což zvyšuje režijní náklady. Pokud na duplikátech nezáleží, je efektivnější volbou UNION ALL.

Ano. Každý SELECT v UNION musí vrátit stejný počet sloupců a odpovídající sloupce musí mít kompatibilní datové typy ve stejném pořadí. Jinak PostgreSQL vyvolá chybu a dotaz se nezdaří.

Ano. Názvy sloupců se mohou lišit, protože UNION porovnává sloupce podle pozice, nikoli podle názvu. Datové typy musí být stále kompatibilní a výsledná sada používá názvy sloupců z prvního příkazu SELECT.

Příkaz UNION svisle stohuje řádky dvou sad výsledků do jednoho seznamu sloupců a odstraňuje duplikáty. Příkaz JOIN kombinuje sloupce z různých tabulek vodorovně na základě souvisejícího klíče, takže řádky rozšiřuje místo jejich přidávání.

ORDER BY seřadí konečný kombinovaný výsledek, takže PostgreSQL umožňuje pouze jeden ORDER BY umístěný za posledním SELECT. Řazení jednotlivých dotazů nejprve by po sloučení jejich řádků ztratilo smysl.

Asistenti umělé inteligence, jako je GitHub Copilot, zarovnávají seznamy sloupců každého SELECTu, označují neshodné datové typy a doporučují UNION nebo UNION ALL na základě toho, zda by se měly zachovat duplikáty, čímž se snižují běžné chyby v dotazech.

Ano. Prozkoumáním vašich tabulek a cíle může asistent s umělou inteligencí určit, zda jsou duplicitní řádky možné a smysluplné, a poté navrhnout UNION ALL, pokud jsou duplikáty přijatelné pro zvýšení rychlosti, nebo UNION, pokud je nutné je odstranit.

Funkce UNION vrací řádky nalezené v obou dotazech. Funkce INTERSECT vrací pouze řádky přítomné v obou dotazech a funkce EXCEPT vrací řádky v prvním dotazu, ale ne ve druhém. Všechny tři ve výchozím nastavení odstraňují duplikáty.

Shrňte tento příspěvek takto: