PostgreSQL Union, Union ALLA med exempel

โšก Smart sammanfattning

PostgreSQL UNION kombinerar resultaten av tvรฅ eller flera SELECT-satser till en enda resultatuppsรคttning och tar bort dubbletter av rader, medan UNION ALL behรฅller varje rad, vilket ger ett snabbare alternativ nรคr dubbletter inte spelar nรฅgon roll.

  • ๐Ÿ”— Kombinera: UNION sammanfogar rader frรฅn flera SELECT-satser till en resultatuppsรคttning.
  • ๐Ÿงน Dubbletter: UNION tar bort dubbletter av rader, medan UNION ALL behรฅller alla matchande rader.
  • ๐Ÿ“ regler: Varje SELECT mรฅste returnera samma antal kolumner med kompatibla datatyper.
  • โ†•๏ธ SORTERA EFTER: En enda ORDER BY i slutet sorterar den kombinerade resultatmรคngden.
  • โšก Prestanda: UNION ALL kรถrs snabbare eftersom det hoppar รถver steget fรถr borttagning av dubbletter.
  • ๐Ÿค– AI-hjรคlp: AI-assistenter justerar kolumner och vรคljer mellan UNION och UNION ALL.

PostgreSQL UNION och UNION ALLA

Vad รคr PostgreSQL Union?

Ocuco-landskapet PostgreSQL UNION-operatorn anvรคnds fรถr att kombinera resultatuppsรคttningar frรฅn mer รคn en SELECT-sats till en resultatuppsรคttning. Alla duplicerade rader frรฅn resultaten av SELECT-satserna elimineras. UNION-operatรถren arbetar under tvรฅ villkor:

  • SELECT-frรฅgorna mรฅste returnera samma antal kolumner.
  • Datatyperna fรถr alla motsvarande kolumner mรฅste vara kompatibla.

UNION-operatorn anvรคnds normalt fรถr att kombinera data frรฅn relaterade tabeller som inte har normaliserats 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)];

Hรคr รคr en fรถrklaring till ovanstรฅende parametrar:

Expression_1, expression_2, โ€ฆ expression_n รคr de berรคkningar eller kolumner som du behรถver hรคmta.

Tabellerna รคr de tabeller som du behรถver hรคmta poster frรฅn.

WHERE-villkoren รคr de villkor som mรฅste uppfyllas fรถr att poster ska kunna hรคmtas.

Obs: Eftersom UNION-operatorn inte returnerar dubbletter kommer anvรคndningen av UNION DISTINCT inte att ha nรฅgon inverkan pรฅ resultaten.

PostgreSQL Union

UNION-operatorn tar bort dubbletter, pรฅ samma sรคtt som Vร„LJ DISTINCT gรถr. Lรฅt oss demonstrera detta. Vi har en databas som heter Demo med fรถljande tabeller:

Bok:

PostgreSQL Union

Pris:

PostgreSQL Union

Lรฅt oss kรถra fรถljande kommando:

SELECT id
FROM Book
UNION
SELECT id
FROM Price;

Kommandot returnerar fรถljande:

PostgreSQL Union

Id-kolumnen visas i bรฅde bok- och pristabellerna. Det visas dock bara en gรฅng i resultatet. Anledningen รคr det PostgreSQL UNION-operatorn returnerar inte dubbletter.

PostgreSQL Union Alla

Den hรคr operatorn kombinerar resultatuppsรคttningar frรฅn mer รคn en SELECT-sats utan att ta bort dubbletter. Operatรถren krรคver att varje SELECT-sats har ett liknande antal fรคlt i resultatuppsรคttningar av liknande datatyper.

Syntax:

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

Hรคr รคr en fรถrklaring till ovanstรฅende parametrar:

Expression_1, expression_2, โ€ฆ expression_n รคr de berรคkningar eller kolumner som du behรถver hรคmta.

Tabellerna รคr de tabeller som du behรถver hรคmta poster frรฅn.

WHERE-villkoren รคr de villkor som mรฅste uppfyllas fรถr att poster ska kunna hรคmtas.

Obs: Bรฅda SELECT-satserna mรฅste ha lika mรฅnga uttryck.

Vi kommer att anvรคnda fรถljande tabeller:

Bok:

PostgreSQL Union Alla

Pris:

PostgreSQL Union Alla

Kรถr fรถljande kommando:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

Det bรถr returnera fรถljande:

PostgreSQL Union Alla

Dubletterna har inte tagits bort.

SORTERA EFTER

Ocuco-landskapet PostgreSQL UNION-operatorn kan anvรคndas tillsammans med ORDER BY-satsen fรถr att ordna frรฅgeresultaten. Fรถr att visa detta kommer vi att anvรคnda fรถljande tabeller:

Pris:

SORTERA EFTER

Pris2:

SORTERA EFTER

Hรคr รคr kommandot som visar hur man anvรคnder UNION-operatorn tillsammans med ORDER BY-satsen:

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

Kommandot returnerar fรถljande:

SORTERA EFTER

Skivorna sorterades efter priskolumnen. Klausulen ordnar posterna i stigande ordning som standard. Fรถr att ordna dem i fallande ordning, lรคgg till DESC-satsen som visas nedan:

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

Kommandot returnerar fรถljande:

SORTERA EFTER

Posterna har ordnats baserat pรฅ priskolumnen i fallande ordning.

Nรคr ska man anvรคnda Union och nรคr ska man anvรคnda Union All?

Anvรคnd operatorn UNION nรคr du har flera tabeller med liknande struktur men som รคr uppdelade av en anledning. Den รคr bra nรคr du behรถver ta bort eller eliminera dubbletter av poster.

Anvรคnd operatorn UNION ALL nรคr du inte behรถver ta bort eller eliminera dubbletter av poster.

Anvรคnder pgAdmin

Lรฅt oss nu se hur alla tre รฅtgรคrderna utfรถrs med pgAdmin.

Sรฅ hรคr anvรคnder du PostgreSQL Union med hjรคlp av pgAdmin

Fรถljande รคr en steg-fรถr-steg-process fรถr hur man anvรคnder PostgreSQL UNION via pgAdmin:

Steg 1) Logga in pรฅ ditt pgAdmin-konto.

Steg 2) I navigeringsfรคltet till vรคnster klickar du pรฅ Databaser och sedan pรฅ Demo.

Anvรคnda PostgreSQL Union med hjรคlp av pgAdmin

Steg 3) Skriv in frรฅgan i frรฅgeredigeraren:

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

Steg 4) Klicka pรฅ knappen Kรถr.

Anvรคnda PostgreSQL Union med hjรคlp av pgAdmin

Det bรถr returnera fรถljande:

Anvรคnda PostgreSQL Union med hjรคlp av pgAdmin

Union Alla

Steg 1) Logga in pรฅ ditt pgAdmin-konto.

Steg 2) I navigeringsfรคltet till vรคnster klickar du pรฅ Databaser och sedan pรฅ Demo.

Anvรคnda PostgreSQL Union Alla Anvรคnder pgAdmin

Steg 3) Skriv in frรฅgan i frรฅgeredigeraren:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

Steg 4) Klicka pรฅ knappen Kรถr.

Anvรคnda PostgreSQL Union Alla Anvรคnder pgAdmin

Det bรถr returnera fรถljande:

Anvรคnda PostgreSQL Union Alla Anvรคnder pgAdmin

SORTERA EFTER

UNION ALL-operatorn kan kombineras med ORDER BY-satsen fรถr att ordna resultat i resultatuppsรคttningen. Till exempel:

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

Kommandot returnerar fรถljande:

Anvรคnda PostgreSQL BESTร„LL GENOM att anvรคnda pgAdmin

Resultaten รคr bestรคllda.

Ladda ner den databas som anvรคnds i denna handledning

Vanliga frรฅgor

UNION ALL รคr snabbare eftersom det helt enkelt sammanfogar rader. UNION mรฅste sortera eller hasha de kombinerade raderna fรถr att ta bort dubbletter, vilket รถkar kostnaden. Nรคr dubbletter inte spelar nรฅgon roll รคr UNION ALL det effektivare valet.

Ja. Varje SELECT i en UNION mรฅste returnera samma antal kolumner, och matchande kolumner mรฅste ha kompatibla datatyper i samma ordning. Annars PostgreSQL genererar ett fel och frรฅgan misslyckas.

Ja. Kolumnnamnen kan skilja sig รฅt eftersom UNION matchar kolumner efter position, inte efter namn. Datatyperna mรฅste fortfarande vara kompatibla, och resultatmรคngden anvรคnder kolumnnamnen frรฅn den fรถrsta SELECT-satsen.

UNION staplar raderna frรฅn tvรฅ resultatmรคngder vertikalt till en kolumnlista och tar bort dubbletter. En JOIN kombinerar kolumner frรฅn olika tabeller horisontellt baserat pรฅ en relaterad nyckel, sรฅ den breddar rader istรคllet fรถr att lรคgga till dem.

ORDER BY sorterar det slutliga kombinerade resultatet, sรฅ PostgreSQL tillรฅter endast en ORDER BY placerad efter den sista SELECT. Att sortera de enskilda frรฅgorna fรถrst skulle vara meningslรถst nรคr deras rader har sammanfogats.

AI-assistenter som GitHub Copilot justerar kolumnlistorna fรถr varje SELECT, flaggar datatyper som inte matchar och rekommenderar UNION eller UNION ALL baserat pรฅ om dubbletter ska behรฅllas, vilket minskar vanliga frรฅgefel.

Ja. Genom att granska dina tabeller och mรฅl kan en AI-assistent avgรถra om dubbletter av rader รคr mรถjliga och meningsfulla, och sedan fรถreslรฅ UNION ALL nรคr dubbletter รคr acceptabla fรถr att รถka hastigheten, eller UNION nรคr de mรฅste tas bort.

UNION returnerar rader som finns i endera frรฅgan. INTERSECT returnerar endast rader som finns i bรฅda frรฅgorna, och EXCEPT returnerar rader i den fรถrsta frรฅgan men inte den andra. Alla tre tar bort dubbletter som standard.

Sammanfatta detta inlรคgg med: