PostgreSQL Union, Union ALLE med eksempler

โšก Smart opsummering

PostgreSQL UNION kombinerer resultaterne af to eller flere SELECT-sรฆtninger i et enkelt resultatsรฆt og fjerner dubletter, mens UNION ALL beholder alle rรฆkker, hvilket giver en hurtigere lรธsning, nรฅr dubletter ikke betyder noget.

  • ๐Ÿ”— Forene: UNION fletter rรฆkker fra flere SELECT-sรฆtninger sammen til รฉt resultatsรฆt.
  • ๐Ÿงน Dubletter: UNION fjerner dubletter af rรฆkker, mens UNION ALL bevarer alle matchende rรฆkker.
  • ๐Ÿ“ Regler: Hver SELECT skal returnere det samme antal kolonner med kompatible datatyper.
  • โ†•๏ธ BESTIL AF: En enkelt ORDER BY til sidst sorterer det kombinerede resultatsรฆt.
  • โšก Ydelse: UNION ALL kรธrer hurtigere, fordi den springer trinnet med fjernelse af dubletter over.
  • ๐Ÿค– AI-hjรฆlp: AI-assistenter justerer kolonner og vรฆlger mellem UNION og UNION ALL.

PostgreSQL UNION og UNION ALLE

Hvad er PostgreSQL Union?

PostgreSQL UNION-operatoren bruges til at kombinere resultatsรฆt fra mere end รฉn SELECT-sรฆtning til รฉt resultatsรฆt. Alle duplikerede rรฆkker fra resultaterne af SELECT-sรฆtningerne elimineres. UNION-operatรธren arbejder under to forhold:

  • SELECT-forespรธrgsler skal returnere det samme antal kolonner.
  • Datatyperne for alle tilsvarende kolonner skal vรฆre kompatible.

UNION-operatoren bruges normalt til at kombinere data fra relaterede tabeller, der ikke er blevet normaliseret perfekt.

Syntaks

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)];

Her er en forklaring pรฅ ovenstรฅende parametre:

Udtrykket_1, udtryk_2, โ€ฆ udtryk_n er de beregninger eller kolonner, du skal hente.

Tabellerne er de tabeller, hvorfra du skal hente poster.

WHERE-betingelserne er de betingelser, der skal vรฆre opfyldt, for at registreringer kan hentes.

Bemรฆrk: Da UNION-operatoren ikke returnerer dubletter, vil brugen af โ€‹โ€‹UNION DISTINCT ikke have nogen indflydelse pรฅ resultaterne.

PostgreSQL Union

UNION-operatoren fjerner dubletter pรฅ samme mรฅde som Vร†LG DISTINKT gรธr. Lad os demonstrere dette. Vi har en database med navnet Demo med fรธlgende tabeller:

Bestil:

PostgreSQL Union

Pris:

PostgreSQL Union

Lad os kรธre fรธlgende kommando:

SELECT id
FROM Book
UNION
SELECT id
FROM Price;

Kommandoen returnerer fรธlgende:

PostgreSQL Union

Id-kolonnen vises i bรฅde bog- og pristabellerne. Det vises dog kun รฉn gang i resultatet. ร…rsagen er det PostgreSQL UNION-operatoren returnerer ikke dubletter.

PostgreSQL Union Alle

Denne operator kombinerer resultatsรฆt fra mere end รฉn SELECT-sรฆtning uden at fjerne dubletter. Operatรธren krรฆver, at hver SELECT-sรฆtning har et tilsvarende antal felter i resultatsรฆt med lignende datatyper.

Syntaks:

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)];

Her er en forklaring pรฅ ovenstรฅende parametre:

Udtrykket_1, udtryk_2, โ€ฆ udtryk_n er de beregninger eller kolonner, du skal hente.

Tabellerne er de tabeller, hvorfra du skal hente poster.

WHERE-betingelserne er de betingelser, der skal vรฆre opfyldt, for at registreringer kan hentes.

Bemรฆrk: Begge SELECT-sรฆtninger skal have et lige antal udtryk.

Vi vil bruge fรธlgende tabeller:

Bestil:

PostgreSQL Union Alle

Pris:

PostgreSQL Union Alle

Kรธr fรธlgende kommando:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

Det skal returnere fรธlgende:

PostgreSQL Union Alle

Dubletterne er ikke blevet fjernet.

BESTIL BY

PostgreSQL UNION-operatoren kan bruges sammen med ORDER BY-klausulen til at bestille forespรธrgselsresultaterne. For at demonstrere dette vil vi bruge fรธlgende tabeller:

Pris:

BESTIL BY

Pris 2:

BESTIL BY

Her er kommandoen, der viser, hvordan man bruger UNION-operatoren sammen med ORDER BY-sรฆtningen:

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

Kommandoen returnerer fรธlgende:

BESTIL BY

Posterne blev sorteret efter priskolonnen. Klausulen sorterer som standard posterne i stigende rรฆkkefรธlge. For at bestille dem i faldende rรฆkkefรธlge skal du tilfรธje DESC-klausulen som vist nedenfor:

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

Kommandoen returnerer fรธlgende:

BESTIL BY

Posterne er sorteret ud fra priskolonnen i faldende rรฆkkefรธlge.

Hvornรฅr skal man bruge Union, og hvornรฅr skal man bruge Union All?

Brug UNION-operatoren, nรฅr du har flere tabeller med en lignende struktur, men som er opdelt af en grund. Den er god, nรฅr du har brug for at fjerne eller eliminere dubletter.

Brug UNION ALL-operatoren, nรฅr du ikke har brug for at fjerne eller eliminere dubletter.

Bruger pgAdmin

Lad os nu se, hvordan alle tre handlinger udfรธres ved hjรฆlp af pgAdmin.

Sรฅdan bruges den: PostgreSQL Union ved hjรฆlp af pgAdmin

Fรธlgende er en trin-for-trin proces til brug PostgreSQL UNION via pgAdmin:

Trin 1) Log ind pรฅ din pgAdmin-konto.

Trin 2) Klik pรฅ Databaser i navigationslinjen til venstre, og klik derefter pรฅ Demo.

Brug PostgreSQL Union ved hjรฆlp af pgAdmin

Trin 3) Indtast forespรธrgslen i forespรธrgselseditoren:

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

Trin 4) Klik pรฅ knappen Udfรธr.

Brug PostgreSQL Union ved hjรฆlp af pgAdmin

Det skal returnere fรธlgende:

Brug PostgreSQL Union ved hjรฆlp af pgAdmin

Union Alle

Trin 1) Log ind pรฅ din pgAdmin-konto.

Trin 2) Klik pรฅ Databaser i navigationslinjen til venstre, og klik derefter pรฅ Demo.

Brug PostgreSQL Union Alle Bruger pgAdmin

Trin 3) Indtast forespรธrgslen i forespรธrgselseditoren:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

Trin 4) Klik pรฅ knappen Udfรธr.

Brug PostgreSQL Union Alle Bruger pgAdmin

Det skal returnere fรธlgende:

Brug PostgreSQL Union Alle Bruger pgAdmin

BESTIL BY

UNION ALL-operatoren kan kombineres med ORDER BY-klausulen for at bestille resultater i resultatsรฆttet. For eksempel:

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

Kommandoen returnerer fรธlgende:

Brug PostgreSQL BESTIL VED at bruge pgAdmin

Resultaterne er bestilt.

Download databasen brugt i denne vejledning

Ofte Stillede Spรธrgsmรฅl

UNION ALL er hurtigere, fordi den simpelthen sammenkรฆder rรฆkker. UNION skal sortere eller hashe de kombinerede rรฆkker for at fjerne dubletter, hvilket รธger overhead. Nรฅr dubletter ikke betyder noget, er UNION ALL det mere effektive valg.

Ja. Hver SELECT i en UNION skal returnere det samme antal kolonner, og matchende kolonner skal have kompatible datatyper i samme rรฆkkefรธlge. Ellers PostgreSQL giver en fejl, og forespรธrgslen mislykkes.

Ja. Kolonnenavnene kan variere, fordi UNION matcher kolonner efter position, ikke efter navn. Datatyperne skal stadig vรฆre kompatible, og resultatsรฆttet bruger kolonnenavnene fra den fรธrste SELECT-sรฆtning.

UNION stabler rรฆkkerne fra to resultatsรฆt lodret i รฉn kolonneliste og fjerner dubletter. En JOIN kombinerer kolonner fra forskellige tabeller vandret baseret pรฅ en relateret nรธgle, sรฅ den udvider rรฆkker i stedet for at tilfรธje dem.

ORDER BY sorterer det endelige kombinerede resultat, sรฅ PostgreSQL tillader kun รฉn ORDER BY placeret efter den sidste SELECT. Det ville vรฆre meningslรธst at sortere de individuelle forespรธrgsler fรธrst, nรฅr deres rรฆkker er flettet sammen.

AI-assistenter som GitHub Copilot justerer kolonnelisterne for hver SELECT, markerer uoverensstemmelser i datatyper og anbefaler UNION eller UNION ALL baseret pรฅ, om dubletter skal gemmes, hvilket reducerer almindelige forespรธrgselsfejl.

Ja. Ved at undersรธge dine tabeller og mรฅl kan en AI-assistent afgรธre, om dubletterรฆkker er mulige og meningsfulde, og derefter foreslรฅ UNION ALL, nรฅr dubletter er acceptable for at รธge hastigheden, eller UNION, nรฅr de skal fjernes.

UNION returnerer rรฆkker fundet i begge forespรธrgsler. INTERSECT returnerer kun rรฆkker, der findes i begge forespรธrgsler, og EXCEPT returnerer rรฆkker i den fรธrste forespรธrgsel, men ikke den anden. Alle tre fjerner som standard dubletter.

Opsummer dette indlรฆg med: