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: