PostgreSQL Sammenføyningstyper: Indre, ytre, venstre, høyre

⚡ Smart oppsummering

PostgreSQL Sammenføyninger henter og kombinerer rader fra to eller flere tabeller ved hjelp av en delt nøkkel, og inkluderer indre sammenføyninger som theta, EQUI og naturlig, pluss ytre sammenføyninger som dekker venstre, høyre og fullstendige resultater.

  • 🔗 Kombinere: Kobler sammen flettekolonner fra flere tabeller basert på en felles nøkkel.
  • 🎯 Indre sammenføyning: Indre koblinger returnerer bare rader der koblingsbetingelsen er oppfylt.
  • ¬ i ... Venstre Bli med: LEFT OUTER JOIN beholder alle rader i venstre tabell, og legger til NULL-er for ikke-samsvarende høyre rader.
  • ➡️ Høyre bli med: RIGHT OUTER JOIN beholder alle rader i høyre tabell, og legger til NULL-er for umatchede venstrerader.
  • 🔵 Fullstendig medlemskap: FULL OUTER JOIN returnerer alle rader fra begge tabellene med NULL-er der det ikke finnes noen treff.
  • 🤖 AI-hjelp: AI-assistenter velger riktig sammenføyningstype og skriver PÅ-betingelsen.

PostgreSQL Bli med typer

Hva er slutter seg til PostgreSQL?

PostgreSQL tiltrer brukes til å hente data fra mer enn én tabell. Med Joins er det mulig for oss å kombinere SELECT- og JOIN-setningene til én setning. En JOIN-betingelse legges til setningen, og alle rader som oppfyller betingelsene returneres. Verdiene fra forskjellige tabeller kombineres basert på felles kolonner. Felleskolonnen er stort sett en primærnøkkel i den første tabellen og en fremmednøkkel i den andre tabellen.

PostgreSQL Bli med typer

Det finnes to typer Joins in PostgreSQL:

  • Indre sammenføyninger
  • Ytre skjøter

PostgreSQL Indre sammenføyning

Det er 3 typer Inner Joins in PostgreSQL:

  • Theta bli med
  • Naturlig sammenføyning
  • EQUI bli med

Theta Bli med

En theta-sammenføyning lar en slå sammen to tabeller basert på tilstanden som er representert av theta. Theta joins kan fungere med alle sammenligningsoperatører. I de fleste tilfeller blir theta-sammenføyningen referert til som indre sammenføyning.

Theta join er den mest grunnleggende typen JOIN. Den vil returnere alle rader fra tabellene der JOIN-betingelsen er oppfylt.

Syntaks:

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

Tenk på følgende tabeller i demodatabasen:

Bok:

PostgreSQL Theta Bli med

Pris:

PostgreSQL Theta Bli med

Vi ønsker å se navnet på hver bok og den tilsvarende prisen. Vi kan kjøre følgende kommando:

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

Dette vil returnere følgende:

PostgreSQL Theta Bli med

Kun 3 rader oppfylte sammenføyningsbetingelsen.

EQUI Bli med

EQUI-koblingen gir oss en måte å slå sammen to tabeller basert på primærnøkkel/fremmednøkkelforhold. For eksempel:

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

Dette vil returnere følgende:

PostgreSQL EQUI Bli med

Poster har blitt returnert fra begge tabellene basert på de vanlige kolonnene, det vil si id-kolonnen.

Naturlig Bli med

Denne typen sammenføyning gir oss en annen måte å skrive en EQUI sammenføyning på. Vi kan forbedre vårt forrige eksempel ved å legge til NATURAL-søkeordet som vist nedenfor:

SELECT *
FROM Book
NATURAL JOIN Price;

Dette vil returnere følgende:

PostgreSQL Naturlig Bli med

Bare én id-kolonne har blitt returnert. NATURAL JOIN kunne merke seg at id-kolonnen er vanlig i de to tabellene. Bare én ble returnert.

PostgreSQL Ytre sammenføyning

Det er 3 typer ytre sammenføyninger PostgreSQL:

  • Venstre ytre skjøt
  • Høyre ytre skjøt
  • Full ytre sammenføyning

PostgreSQL Venstre ytre skjøt

LEFT OUTER JOIN vil returnere alle rader i tabellen på venstre side og bare radene i høyre sidetabell der sammenføyningsbetingelsen er oppfylt.

Syntaks:

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

Vi må se navnet på hver bok og den tilsvarende prisen. Vi kan kjøre følgende kommando:

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

Dette returnerer følgende:

PostgreSQL Venstre ytre skjøt

Alle de 4 radene i boktabellen er returnert. Bare 3 rader fra pristabellen oppfylte sammenføyningsbetingelsen. Derfor ble de returnert. Den siste boken har ingen tilsvarende prisverdi.

PostgreSQL Høyre ytre skjøt

RIGHT YTRE JOIN returnerer alle rader i tabellen på høyre side og rader i tabellen på venstre side der sammenføyningsbetingelsen er oppfylt.

Syntaks:

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

For eksempel:

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

Dette returnerer følgende:

PostgreSQL Høyre ytre skjøt

Alle radene i Price-tabellen er returnert. Bare radene i Book-tabellen som oppfylte sammenføyningsbetingelsen ble returnert. Den tredje raden har ingen verdi for name siden ingen treff ble funnet.

Full Ytre Bli med PostgreSQL

Denne typen JOIN vil returnere alle rader i tabellen på venstre side og alle rader i tabellen på høyre side med null der sammenføyningsbetingelsen ikke er oppfylt.

Syntaks:

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

For eksempel:

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

Dette returnerer følgende:

PostgreSQL Full ytre sammenføyning

Alle rader fra alle tabeller er returnert, med nullverdier der ingen treff ble funnet.

Bruker pgAdmin

Oppgavene ovenfor kan utføres i pgAdmin som følger. De følgende avsnittene går gjennom hver sammenføyningstype trinn for trinn.

pgAdmin Inner Join

Trinnene nedenfor viser hvordan du kjører hver variant av indre sammenkobling i pgAdmin.

Slik bruker du Theta Bli med PostgreSQL ved å bruke pgAdmin

Nedenfor finner du trinnene for å bruke Theta Join PostgreSQL bruker pgAdmin:

Trinn 1) Logg på pgAdmin-kontoen din

Åpne pgAdmin og logg på med legitimasjonen din

Trinn 2) Opprett demodatabase

  • Fra navigasjonslinjen til venstre klikker du på Databaser.
  • Klikk på Demo.

pgAdmin Inner Join

Trinn 3) Skriv inn søket

Skriv inn søket nedenfor i spørringsredigeringsprogrammet:

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

Trinn 4) Utfør spørringen

Klikk på Utfør-knappen

pgAdmin Inner Join

Den skal returnere følgende:

pgAdmin Inner Join

EQUI Bli med

Trinn 1) Logg på pgAdmin-kontoen din.

Trinn 2)

  • Fra navigasjonslinjen til venstre klikker du på Databaser.
  • Klikk på Demo.

pgAdmin EQUI Bli med

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

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

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

pgAdmin EQUI Bli med

Den skal returnere følgende:

pgAdmin EQUI Bli med

Naturlig Bli med

Trinn 1) Logg på pgAdmin-kontoen din.

Trinn 2)

  • Fra navigasjonslinjen til venstre klikker du på Databaser.
  • Klikk på Demo.

pgAdmin Naturlig Bli med

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

SELECT *
FROM Book
NATURAL JOIN Price;

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

pgAdmin Naturlig Bli med

Den skal returnere følgende:

pgAdmin Naturlig Bli med

pgAdmin Enkel indre deltakelse

Trinn 1) Logg på pgAdmin-kontoen din.

Trinn 2)

  • Fra navigasjonslinjen til venstre klikker du på Databaser.
  • Klikk på Demo.

pgAdmin Enkel indre deltakelse

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

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

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

pgAdmin Enkel indre deltakelse

Den skal returnere følgende:

pgAdmin Enkel indre deltakelse

pgAdmin Outer Join

Kjør deretter de tre variantene av den ytre sammenkoblingen i pgAdmin ved å følge trinnene nedenfor.

Venstre ytre skjøt

Trinn 1) Logg på pgAdmin-kontoen din.

Trinn 2)

  • Fra navigasjonslinjen til venstre klikker du på Databaser.
  • Klikk på Demo.

pgAdmin Venstre Ytre Join

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

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

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

pgAdmin Venstre Ytre Join

Den skal returnere følgende:

pgAdmin Venstre Ytre Join

Høyre ytre skjøt

Trinn 1) Logg på pgAdmin-kontoen din.

Trinn 2)

  • Fra navigasjonslinjen til venstre klikker du på Databaser.
  • Klikk på Demo.

pgAdmin Høyre Ytre Join

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

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

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

pgAdmin Høyre Ytre Join

Den skal returnere følgende:

pgAdmin Høyre Ytre Join

Full ytre sammenføyning

Trinn 1) Logg på pgAdmin-kontoen din.

Trinn 2)

  • Fra navigasjonslinjen til venstre klikker du på Databaser.
  • Klikk på Demo.

pgAdmin Full Outer Join

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

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

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

pgAdmin Full Outer Join

Den skal returnere følgende:

pgAdmin Full Outer Join

Last ned databasen som brukes i denne opplæringen

Spørsmål og svar

En INNER JOIN returnerer bare rader som samsvarer i begge tabellene. En OUTER JOIN beholder også uoverensstemmende rader, fyller manglende kolonner med NULL, og kan være venstre-, høyre- eller full-tabell avhengig av hvilken tabell som bevares.

En JOIN kombinerer kolonner fra forskjellige tabeller side om side ved hjelp av en samsvarende nøkkel, som utvider hver rad. En UNION stabler radene i to resultatsett vertikalt og krever samme antall kolonner.

En selvkobling kobler en tabell til seg selv ved hjelp av to tabellaliaser. Det er nyttig for å sammenligne rader i én tabell, for eksempel for å matche ansatte med ledere som er lagret i samme tabell.

En CROSS JOIN returnerer det kartesiske produktet, og kobler hver rad i den første tabellen med hver rad i den andre. Den bruker ingen PÅ-betingelse, så den kan raskt produsere veldig store resultatsett.

Ja. Du kan kjede flere JOIN-klausuler i én spørring, og legge til hver ekstra tabell med en annen JOIN- og ON-betingelse. PostgreSQL evaluerer dem for å bygge et enkelt kombinert resultatsett.

AI-assistenter som GitHub Copilot foreslår riktig sammenføyningstype, skriver ON-betingelsen fra fremmednøkler og flagger en manglende betingelse som ville forårsaket et utilsiktet kartesisk produkt, noe som reduserer vanlige sammenføyningsfeil.

Ja. AI-assistenter kan lese en spørreplan, anbefale indekser på sammenføyningskolonner og omskrive sammenføyningsrekkefølge eller -betingelser. Databasen håndhever fortsatt korrekthet, så gjennomgå hvert forslag før du kjører det i produksjon.

Ingen enkeltstående koblinger er alltid raskest; ytelsen avhenger av indekser, radtall og filtre. INNER JOINs på indekserte nøkler er vanligvis effektive, mens FULL OUTER JOINs på store uindekserte tabeller pleier å være de dyreste.

Oppsummer dette innlegget med: