PostgreSQL Kopplingstyper: Inre, Yttre, Vänster, Höger

⚡ Smart sammanfattning

PostgreSQL Joins hämtar och kombinerar rader från två eller flera tabeller med hjälp av en delad nyckel och inkluderar inre kopplingar som theta, EQUI och natural, plus yttre kopplingar som täcker vänster, höger och fullständiga resultat.

  • 🔗 Kombinera: Kopplar samman kolumner från flera tabeller baserat på en gemensam nyckel.
  • 🎯 Inre koppling: Inner joins returnerar endast rader där join-villkoret är uppfyllt.
  • ⬅️ Vänster Gå med: LEFT OUTER JOIN behåller varje rad i vänster tabell och lägger till NULL-värden för omatchade högrader.
  • ➡️ Höger gå med: RIGHT OUTER JOIN behåller varje rad i höger tabell och lägger till NULL-värden för omatchade vänsterrader.
  • ???? Fullständigt medlemskap: FULL OUTER JOIN returnerar alla rader från båda tabellerna med NULL-värden där ingen matchning finns.
  • 🤖 AI-hjälp: AI-assistenter väljer rätt kopplingstyp och skriver ON-villkoret.

PostgreSQL Gå med Typer

Vad är går med i PostgreSQL?

PostgreSQL Fogar används för att hämta data från mer än en tabell. Med Joins är det möjligt för oss att kombinera SELECT- och JOIN-satserna till en enda sats. Ett JOIN-villkor läggs till satsen, och alla rader som uppfyller villkoren returneras. Värdena från olika tabeller kombineras baserat på gemensamma kolumner. Den gemensamma kolumnen är oftast en primärnyckel i den första tabellen och en främmande nyckel i den andra tabellen.

PostgreSQL Gå med Typer

Det finns två typer av Joins in PostgreSQL:

  • Inre sammanfogningar
  • Yttre sammanfogningar

PostgreSQL Inre koppling

Det finns 3 typer av Inner Joins in PostgreSQL:

  • Theta går med
  • Naturlig anslutning
  • EQUI gå med

Theta Gå med

En theta-join tillåter en att sammanfoga två tabeller baserat på villkoret som representeras av theta. Theta joins kan fungera med alla jämförelseoperatorer. I de flesta fall kallas theta-kopplingen som inre koppling.

Theta join är den mest grundläggande typen av JOIN. Det kommer att returnera alla rader från tabellerna där JOIN-villkoret är uppfyllt.

Syntax:

SELECT columns
FROM table-1
INNER JOIN table-2
ON table-1.column = table-2.column;

Tänk på följande tabeller i demodatabasen:

Bok:

PostgreSQL Theta Gå med

Pris:

PostgreSQL Theta Gå med

Vi vill se namnet på varje bok och motsvarande pris. Vi kan köra följande kommando:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

Detta kommer att returnera följande:

PostgreSQL Theta Gå med

Endast 3 rader uppfyllde sammanfogningsvillkoret.

EQUI Gå med

EQUI-anslutningen ger oss ett sätt att sammanfoga två tabeller baserat på relationen primärnyckel/främmande nyckel. Till exempel:

SELECT *
FROM Book
JOIN Price ON Book.id = Price.id;

Detta kommer att returnera följande:

PostgreSQL EQUI Gå med

Poster har returnerats från båda tabellerna baserat på de vanliga kolumnerna, det vill säga id-kolumnen.

Naturlig gå med

Denna typ av join ger oss ett annat sätt att skriva en EQUI join. Vi kan förbättra vårt tidigare exempel genom att lägga till nyckelordet NATURAL som visas nedan:

SELECT *
FROM Book
NATURAL JOIN Price;

Detta kommer att returnera följande:

PostgreSQL Naturlig gå med

Endast en id-kolumn har returnerats. NATURAL JOIN kunde notera att id-kolumnen är vanlig i de två tabellerna. Endast en lämnades tillbaka.

PostgreSQL Yttre anslutning

Det finns 3 typer av Outer Joins in PostgreSQL:

  • Vänster yttre anslutning
  • Höger yttre anslutning
  • Full yttre anslutning

PostgreSQL Vänster yttre anslutning

LEFT OUTER JOIN returnerar alla rader i tabellen på vänster sida och endast raderna i den högra sidotabellen där sammanfogningsvillkoret har uppfyllts.

Syntax:

SELECT columns
FROM table-1
LEFT OUTER JOIN table-2
ON table-1.column = table-2.column;

Vi måste se namnet på varje bok och motsvarande pris. Vi kan köra följande kommando:

SELECT Book.name, Price.price
FROM Book
LEFT JOIN Price
ON Book.id = Price.id;

Detta returnerar följande:

PostgreSQL Vänster yttre anslutning

Alla de fyra raderna i boktabellen har returnerats. Endast 4 rader från pristabellen uppfyllde sammanfogningsvillkoret. Därför återlämnades de. Den sista boken har inget motsvarande prisvärde.

PostgreSQL Höger yttre anslutning

RIGHT OUTER JOIN returnerar alla rader i tabellen på höger sida och rader i tabellen på vänster sida där sammanfogningsvillkoret har uppfyllts.

Syntax:

SELECT columns
FROM table-1
RIGHT OUTER JOIN table-2
ON table-1.column = table-2.column;

Till exempel:

SELECT Book.name, Price.price
FROM Book
RIGHT JOIN Price
ON Book.id = Price.id;

Detta returnerar följande:

PostgreSQL Höger yttre anslutning

Alla rader i pristabellen har returnerats. Endast de rader i boktabellen som uppfyllde kopplingsvillkoret returnerades. Den tredje raden har inget värde för namn eftersom ingen matchning hittades.

Full Outer Anslut PostgreSQL

Denna typ av JOIN kommer att returnera alla rader i tabellen på vänster sida och alla rader i tabellen på höger sida med nollor där joinvillkoret inte är uppfyllt.

Syntax:

SELECT columns
FROM table-1
FULL OUTER JOIN table-2
ON table-1.column = table-2.column;

Till exempel:

SELECT Book.name, Price.price
FROM Book
FULL OUTER JOIN Price
ON Book.id = Price.id;

Detta returnerar följande:

PostgreSQL Full yttre anslutning

Alla rader från alla tabeller har returnerats, med nollor där ingen matchning hittades.

Använder pgAdmin

Ovanstående uppgifter kan utföras i pgAdmin enligt följande. Följande avsnitt går igenom varje kopplingstyp steg för steg.

pgAdmin Inner Join

Stegen nedan visar hur man kör varje inner join-variant i pgAdmin.

Så här använder du Theta Gå med PostgreSQL med pgAdmin

Nedan följer stegen för att använda Theta Join PostgreSQL använder pgAdmin:

Steg 1) Logga in på ditt pgAdmin-konto

Öppna pgAdmin och logga in med dina referenser

Steg 2) Skapa demodatabas

  • Klicka på Databaser i navigeringsfältet till vänster.
  • Klicka på Demo.

pgAdmin Inner Join

Steg 3) Skriv in frågan

Skriv in frågan nedan i frågeredigeraren:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

Steg 4) Utför frågan

Klicka på knappen Kör

pgAdmin Inner Join

Det bör returnera följande:

pgAdmin Inner Join

EQUI Gå med

Steg 1) Logga in på ditt pgAdmin-konto.

Steg 2)

  • Klicka på Databaser i navigeringsfältet till vänster.
  • Klicka på Demo.

pgAdmin EQUI Gå med

Steg 3) Skriv in frågan i frågeredigeraren:

SELECT *
FROM Book
JOIN Price ON Book.id = Price.id;

Steg 4) Klicka på knappen Kör.

pgAdmin EQUI Gå med

Det bör returnera följande:

pgAdmin EQUI Gå med

Naturlig gå med

Steg 1) Logga in på ditt pgAdmin-konto.

Steg 2)

  • Klicka på Databaser i navigeringsfältet till vänster.
  • Klicka på Demo.

pgAdmin Naturlig Gå med

Steg 3) Skriv in frågan i frågeredigeraren:

SELECT *
FROM Book
NATURAL JOIN Price;

Steg 4) Klicka på knappen Kör.

pgAdmin Naturlig Gå med

Det bör returnera följande:

pgAdmin Naturlig Gå med

pgAdmin Enkel Inre Join

Steg 1) Logga in på ditt pgAdmin-konto.

Steg 2)

  • Klicka på Databaser i navigeringsfältet till vänster.
  • Klicka på Demo.

pgAdmin Enkel Inre Join

Steg 3) Skriv in frågan i frågeredigeraren:

SELECT Book.name, Price.price
FROM Book
INNER JOIN Price
ON Book.id = Price.id;

Steg 4) Klicka på knappen Kör.

pgAdmin Enkel Inre Join

Det bör returnera följande:

pgAdmin Enkel Inre Join

pgAdmin Outer Join

Kör sedan de tre varianterna av outer join i pgAdmin med hjälp av stegen nedan.

Vänster yttre anslutning

Steg 1) Logga in på ditt pgAdmin-konto.

Steg 2)

  • Klicka på Databaser i navigeringsfältet till vänster.
  • Klicka på Demo.

pgAdmin Left Outer Join

Steg 3) Skriv in frågan i frågeredigeraren:

SELECT Book.name, Price.price
FROM Book
LEFT JOIN Price
ON Book.id = Price.id;

Steg 4) Klicka på knappen Kör.

pgAdmin Left Outer Join

Det bör returnera följande:

pgAdmin Left Outer Join

Höger yttre anslutning

Steg 1) Logga in på ditt pgAdmin-konto.

Steg 2)

  • Klicka på Databaser i navigeringsfältet till vänster.
  • Klicka på Demo.

pgAdmin Right Outer Join

Steg 3) Skriv in frågan i frågeredigeraren:

SELECT Book.name, Price.price
FROM Book
RIGHT JOIN Price
ON Book.id = Price.id;

Steg 4) Klicka på knappen Kör.

pgAdmin Right Outer Join

Det bör returnera följande:

pgAdmin Right Outer Join

Full yttre anslutning

Steg 1) Logga in på ditt pgAdmin-konto.

Steg 2)

  • Klicka på Databaser i navigeringsfältet till vänster.
  • Klicka på Demo.

pgAdmin Full Outer Join

Steg 3) Skriv in frågan i frågeredigeraren:

SELECT Book.name, Price.price
FROM Book
FULL OUTER JOIN Price
ON Book.id = Price.id;

Steg 4) Klicka på knappen Kör.

pgAdmin Full Outer Join

Det bör returnera följande:

pgAdmin Full Outer Join

Ladda ner den databas som används i denna handledning

Vanliga frågor

En INNER JOIN returnerar endast rader som matchar i båda tabellerna. En OUTER JOIN behåller också omatchade rader, fyller saknade kolumner med NULL, och kan vara vänster-, höger- eller fullständig beroende på vilken tabell som bevaras.

En JOIN kombinerar kolumner från olika tabeller sida vid sida med hjälp av en matchande nyckel, vilket breddar varje rad. En UNION staplar raderna i två resultatmängder vertikalt och kräver samma antal kolumner.

En självkoppling kopplar samman en tabell med sig själv med hjälp av två tabellalias. Den är användbar för att jämföra rader inom en tabell, till exempel för att matcha anställda med chefer som lagras i samma tabell.

En CROSS JOIN returnerar den kartesiska produkten, genom att para ihop varje rad i den första tabellen med varje rad i den andra. Den använder inget ON-villkor, så den kan snabbt producera mycket stora resultatmängder.

Ja. Du kan kedja flera JOIN-klausuler i en fråga och lägga till varje extra tabell med ytterligare ett JOIN- och ON-villkor. PostgreSQL utvärderar dem för att bygga en enda kombinerad resultatuppsättning.

AI-assistenter som GitHub Copilot föreslår rätt kopplingstyp, skriver ON-villkoret från främmande nycklar och flaggar ett saknat villkor som skulle orsaka en oavsiktlig kartesisk produkt, vilket minskar vanliga kopplingsmisstag.

Ja. AI-assistenter kan läsa en frågeplan, rekommendera index för kopplingskolumner och skriva om kopplingsordning eller villkor. Databasen tillämpar fortfarande korrekthet, så granska varje förslag innan du kör det i produktion.

Ingen enskild koppling är alltid snabbast; prestanda beror på index, radantal och filter. INNER JOINs på indexerade nycklar är vanligtvis effektiva, medan FULL OUTER JOINs på stora oindexerade tabeller tenderar att vara de dyraste.

Sammanfatta detta inlägg med: