PostgreSQL Union, Union ALLE med eksempler

⚡ Smart oppsummering

PostgreSQL UNION kombinerer resultatene av to eller flere SELECT-setninger i ett enkelt resultatsett og fjerner dupliserte rader, mens UNION ALL beholder hver rad, noe som gir et raskere alternativ når duplikater ikke spiller noen rolle.

  • 🔗 Kombinere: UNION slår sammen rader fra flere SELECT-setninger til ett resultatsett.
  • 🧹 Kopier: UNION fjerner dupliserte rader, mens UNION ALL beholder alle samsvarende rader.
  • 📐 regler: Hver SELECT må returnere samme antall kolonner med kompatible datatyper.
  • ↕️ REKKEFØLGE ETTER: En enkelt ORDER BY på slutten sorterer det kombinerte resultatsettet.
  • Ytelse: UNION ALL kjører raskere fordi den hopper over trinnet med fjerning av duplikat.
  • 🤖 AI-hjelp: AI-assistenter justerer kolonner og velger mellom UNION og UNION ALL.

PostgreSQL UNION og UNION ALLE

Hva er PostgreSQL Union?

Ocuco PostgreSQL UNION-operatoren brukes til å kombinere resultatsett fra mer enn én SELECT-setning til ett resultatsett. Eventuelle dupliserte rader fra resultatene av SELECT-setningene blir eliminert. UNION-operatøren jobber under to forhold:

  • SELECT-spørringene må returnere samme antall kolonner.
  • Datatypene for alle tilsvarende kolonner må være kompatible.

UNION-operatoren brukes vanligvis til å kombinere data fra relaterte tabeller som ikke er normalisert perfekt.

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

Her er en forklaring på parameterne ovenfor:

Uttrykket_1, uttrykk_2, … uttrykk_n er beregningene eller kolonnene du må hente.

Tabellene er tabellene du må hente poster fra.

WHERE-betingelsen(e) er betingelsene som må være oppfylt for at poster skal kunne hentes.

OBS: Siden UNION-operatoren ikke returnerer duplikater, vil bruken av UNION DISTINCT ikke ha noen innvirkning på resultatene.

PostgreSQL Union

UNION-operatoren fjerner duplikater, på samme måte som VELG DISTINCT gjør. La oss demonstrere dette. Vi har en database som heter Demo med følgende tabeller:

Bok:

PostgreSQL Union

Pris:

PostgreSQL Union

La oss kjøre følgende kommando:

SELECT id
FROM Book
UNION
SELECT id
FROM Price;

Kommandoen vil returnere følgende:

PostgreSQL Union

ID-kolonnen vises i både bok- og pristabellen. Det vises imidlertid bare én gang i resultatet. Grunnen er det PostgreSQL UNION-operatoren returnerer ikke duplikater.

PostgreSQL Union Alle

Denne operatoren kombinerer resultatsett fra mer enn én SELECT-setning uten å fjerne duplikater. Operatøren krever at hver SELECT-setning har et lignende antall felt i resultatsett 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å parameterne ovenfor:

Uttrykket_1, uttrykk_2, … uttrykk_n er beregningene eller kolonnene du må hente.

Tabellene er tabellene du må hente poster fra.

WHERE-betingelsen(e) er betingelsene som må være oppfylt for at poster skal kunne hentes.

OBS: Begge SELECT-setningene må ha et likt antall uttrykk.

Vi vil bruke følgende tabeller:

Bok:

PostgreSQL Union Alle

Pris:

PostgreSQL Union Alle

Kjør følgende kommando:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

Den skal returnere følgende:

PostgreSQL Union Alle

Duplikatene er ikke fjernet.

REKKEFØLGE ETTER

Ocuco PostgreSQL UNION-operatoren kan brukes sammen med ORDER BY-klausulen for å bestille søkeresultatene. For å demonstrere dette vil vi bruke følgende tabeller:

Pris:

REKKEFØLGE ETTER

Pris 2:

REKKEFØLGE ETTER

Her er kommandoen som viser hvordan du bruker UNION-operatøren sammen med ORDER BY-klausulen:

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

Kommandoen vil returnere følgende:

REKKEFØLGE ETTER

Postene ble sortert etter priskolonnen. Klausulen sorterer postene i stigende rekkefølge som standard. For å bestille dem i synkende rekkefølge, legg til DESC-klausulen som vist nedenfor:

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

Kommandoen vil returnere følgende:

REKKEFØLGE ETTER

Postene er sortert basert på priskolonnen i synkende rekkefølge.

Når skal man bruke Union og når skal man bruke Union All?

Bruk UNION-operatoren når du har flere tabeller med lignende struktur, men som er delt av en grunn. Den er nyttig når du trenger å fjerne eller eliminere dupliserte poster.

Bruk UNION ALL-operatoren når du ikke trenger å fjerne eller eliminere dupliserte poster.

Bruker pgAdmin

La oss nå se hvordan alle tre handlingene utføres ved hjelp av pgAdmin.

Hvordan bruke PostgreSQL Union ved hjelp av pgAdmin

Følgende er en trinnvis prosess for hvordan du bruker den PostgreSQL UNION gjennom pgAdmin:

Trinn 1) Logg på pgAdmin-kontoen din.

Trinn 2) Fra navigasjonslinjen til venstre klikker du på Databaser, og deretter på Demo.

Bruk PostgreSQL Union ved hjelp av pgAdmin

Trinn 3) Skriv inn søket i spørringsredigeringsprogrammet:

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

Trinn 4) Klikk på Utfør-knappen.

Bruk PostgreSQL Union ved hjelp av pgAdmin

Den skal returnere følgende:

Bruk PostgreSQL Union ved hjelp av pgAdmin

Union Alle

Trinn 1) Logg på pgAdmin-kontoen din.

Trinn 2) Fra navigasjonslinjen til venstre klikker du på Databaser, og deretter på Demo.

Bruk PostgreSQL Union Alle ved hjelp av pgAdmin

Trinn 3) Skriv inn søket i spørringsredigeringsprogrammet:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

Trinn 4) Klikk på Utfør-knappen.

Bruk PostgreSQL Union Alle ved hjelp av pgAdmin

Den skal returnere følgende:

Bruk PostgreSQL Union Alle ved hjelp av pgAdmin

REKKEFØLGE ETTER

UNION ALL-operatøren kan kombineres med ORDER BY-klausulen for å bestille resultater i resultatsettet. For eksempel:

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

Kommandoen vil returnere følgende:

Bruk PostgreSQL BESTILL VED Å bruke pgAdmin

Resultatene er bestilt.

Last ned databasen som brukes i denne opplæringen

Spørsmål og svar

UNION ALL er raskere fordi den rett og slett sammenkobler rader. UNION må sortere eller hashe de kombinerte radene for å fjerne duplikater, noe som øker overhead. Når duplikater ikke spiller noen rolle, er UNION ALL det mer effektive valget.

Ja. Hver SELECT i en UNION må returnere samme antall kolonner, og samsvarende kolonner må ha kompatible datatyper i samme rekkefølge. Ellers PostgreSQL genererer en feil, og spørringen mislykkes.

Ja. Kolonnenavnene kan variere fordi UNION matcher kolonner etter posisjon, ikke etter navn. Datatypene må fortsatt være kompatible, og resultatsettet bruker kolonnenavnene fra den første SELECT-setningen.

UNION stabler radene fra to resultatsett vertikalt til én kolonneliste, og fjerner duplikater. En JOIN kombinerer kolonner fra forskjellige tabeller horisontalt basert på en relatert nøkkel, slik at den utvider rader i stedet for å legge dem til.

ORDER BY sorterer det endelige kombinerte resultatet, slik at PostgreSQL tillater bare én ORDER BY plassert etter den siste SELECT-en. Å sortere de individuelle spørringene først ville være meningsløst når radene deres er slått sammen.

AI-assistenter som GitHub Copilot justerer kolonnelistene for hver SELECT, flagger datatyper som ikke samsvarer, og anbefaler UNION eller UNION ALL basert på om duplikater skal beholdes, noe som reduserer vanlige spørrefeil.

Ja. Ved å undersøke tabellene og målet ditt, kan en AI-assistent avgjøre om dupliserte rader er mulige og meningsfulle, og deretter foreslå UNION ALL når duplikater er akseptable for å øke hastigheten, eller UNION når de må fjernes.

UNION returnerer rader som finnes i begge spørringene. INTERSECT returnerer bare rader som finnes i begge spørringene, og EXCEPT returnerer rader i den første spørringen, men ikke den andre. Alle tre fjerner duplikater som standard.

Oppsummer dette innlegget med: