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: