PostgreSQL Samlingstyper: Indre, Ydre, Venstre, Højre

⚡ Smart opsummering

PostgreSQL Joins henter og kombinerer rækker fra to eller flere tabeller ved hjælp af en delt nøgle og inkluderer indre joins såsom theta, EQUI og natural, plus ydre joins, der dækker venstre, højre og fulde resultater.

  • 🔗 Forene: Sammenfletter flettekolonner fra flere tabeller baseret på en fælles nøgle.
  • 🎯 Indre tilslutning: Inner joins returnerer kun rækker, hvor join-betingelsen er opfyldt.
  • ⬅️ Venstre Deltag: LEFT OUTER JOIN beholder alle rækker i venstre tabel og tilføjer NULL'er for ikke-matchede rækker i højre side.
  • ➡️ Højre tilslutning: RIGHT OUTER JOIN beholder alle rækker i højre tabel og tilføjer NULL'er for umatchede venstre rækker.
  • ???? Fuld tilmelding: FULL OUTER JOIN returnerer alle rækker fra begge tabeller med NULL'er, hvor der ikke findes noget match.
  • 🤖 AI-hjælp: AI-assistenter vælger den korrekte join-type og skriver ON-betingelsen.

PostgreSQL Deltag typer

Hvad er joins in PostgreSQL?

PostgreSQL Sammenføjninger bruges til at hente data fra mere end én tabel. Med Joins er det muligt for os at kombinere SELECT- og JOIN-sætningerne til en enkelt sætning. En JOIN-betingelse tilføjes til sætningen, og alle rækker, der opfylder betingelserne, returneres. Værdierne fra forskellige tabeller kombineres baseret på fælles kolonner. Den fælles kolonne er for det meste en primærnøgle i den første tabel og en fremmednøgle i den anden tabel.

PostgreSQL Deltag typer

Der er to typer join-in PostgreSQL:

  • Indvendige sammenføjninger
  • Ydre sammenføjninger

PostgreSQL Indvendig sammenføjning

Der er 3 typer af Inner Joins in PostgreSQL:

  • Theta slutter sig
  • Naturlig sammenføjning
  • EQUI tilslutte sig

Theta Deltag

En theta join giver mulighed for at forbinde to tabeller baseret på den betingelse, der er repræsenteret af theta. Theta joins kan fungere med alle sammenligningsoperatører. I de fleste tilfælde omtales theta-sammenføjningen som indre sammenføjning.

Theta join er den mest grundlæggende type JOIN. Det vil returnere alle rækker fra tabellerne, hvor JOIN-betingelsen er opfyldt.

Syntaks:

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

Overvej følgende tabeller i demodatabasen:

Bestil:

PostgreSQL Theta Deltag

Pris:

PostgreSQL Theta Deltag

Vi ønsker at se navnet på hver bog og den tilsvarende pris. Vi kan kø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 Deltag

Kun 3 rækker opfyldte sammenføjningsbetingelsen.

EQUI Deltag

EQUI-sammenføjningen giver os en måde at forbinde to tabeller baseret på primær nøgle/fremmednøgleforhold. For eksempel:

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

Dette vil returnere følgende:

PostgreSQL EQUI Deltag

Poster er blevet returneret fra begge tabeller baseret på de fælles kolonner, det vil sige id-kolonnen.

Naturlig Deltag

Denne type join giver os en anden måde at skrive en EQUI join på. Vi kan forbedre vores tidligere eksempel ved at tilføje nøgleordet NATURAL som vist nedenfor:

SELECT *
FROM Book
NATURAL JOIN Price;

Dette vil returnere følgende:

PostgreSQL Naturlig Deltag

Kun én id-kolonne er blevet returneret. NATURAL JOIN var i stand til at bemærke, at id-kolonnen er fælles i de to tabeller. Kun én blev returneret.

PostgreSQL Ydre tilslutning

Der er 3 typer Outer Joins in PostgreSQL:

  • Venstre ydre samling
  • Højre ydre samling
  • Fuld ydre tilslutning

PostgreSQL Venstre ydre samling

LEFT OUTER JOIN returnerer alle rækker i tabellen på venstre side og kun rækkerne i højre side tabel, hvor sammenføjningsbetingelsen er opfyldt.

Syntaks:

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

Vi skal se navnet på hver bog og den tilsvarende pris. Vi kan kø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 ydre samling

Alle de 4 rækker i bogtabellen er returneret. Kun 3 rækker fra pristabellen opfyldte sammenføjningsbetingelsen. Derfor blev de returneret. Den sidste bog har ingen tilsvarende prisværdi.

PostgreSQL Højre ydre samling

RIGHT OUTER JOIN returnerer alle rækker i tabellen på højre side og rækker i tabellen på venstre side, hvor sammenføjningsbetingelsen er opfyldt.

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øjre ydre samling

Alle rækker i Price-tabellen er blevet returneret. Kun de rækker i Book-tabellen, der opfyldte join-betingelsen, blev returneret. Den 3. række har ingen værdi for name, da der ikke blev fundet noget match.

Fuld ydre tilslutning PostgreSQL

Denne type JOIN vil returnere alle rækker i tabellen på venstre side og alle rækker i tabellen på højre side med nuller, hvor joinbetingelsen ikke er opfyldt.

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 Fuld ydre tilslutning

Alle rækker fra alle tabeller er blevet returneret, med nuller, hvor der ikke blev fundet nogen match.

Bruger pgAdmin

Ovenstående opgaver kan udføres i pgAdmin som følger. De følgende afsnit gennemgår hver join-type trin for trin.

pgAdmin Inner Join

Trinene nedenfor viser, hvordan du kører hver inner join-variant i pgAdmin.

Sådan bruger du Theta Deltag i PostgreSQL ved hjælp af pgAdmin

Nedenfor er trinnene til at bruge Theta Join PostgreSQL ved hjælp af pgAdmin:

Trin 1) Log ind på din pgAdmin-konto

Åbn pgAdmin og log ind med dine legitimationsoplysninger

Trin 2) Opret demodatabase

  • Fra navigationslinjen til venstre - Klik på Databaser.
  • Klik på Demo.

pgAdmin Inner Join

Trin 3) Indtast forespørgslen

Indtast nedenstående forespørgsel i forespørgselseditoren:

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

Trin 4) Udfør forespørgslen

Klik på knappen Udfør

pgAdmin Inner Join

Det skal returnere følgende:

pgAdmin Inner Join

EQUI Deltag

Trin 1) Log ind på din pgAdmin-konto.

Trin 2)

  • Fra navigationslinjen til venstre - Klik på Databaser.
  • Klik på Demo.

pgAdmin EQUI Deltag

Trin 3) Indtast forespørgslen i forespørgselseditoren:

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

Trin 4) Klik på knappen Udfør.

pgAdmin EQUI Deltag

Det skal returnere følgende:

pgAdmin EQUI Deltag

Naturlig Deltag

Trin 1) Log ind på din pgAdmin-konto.

Trin 2)

  • Fra navigationslinjen til venstre - Klik på Databaser.
  • Klik på Demo.

pgAdmin Natural Join

Trin 3) Indtast forespørgslen i forespørgselseditoren:

SELECT *
FROM Book
NATURAL JOIN Price;

Trin 4) Klik på knappen Udfør.

pgAdmin Natural Join

Det skal returnere følgende:

pgAdmin Natural Join

pgAdmin Enkel indre tilslutning

Trin 1) Log ind på din pgAdmin-konto.

Trin 2)

  • Fra navigationslinjen til venstre - Klik på Databaser.
  • Klik på Demo.

pgAdmin Enkel indre tilslutning

Trin 3) Indtast forespørgslen i forespørgselseditoren:

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

Trin 4) Klik på knappen Udfør.

pgAdmin Enkel indre tilslutning

Det skal returnere følgende:

pgAdmin Enkel indre tilslutning

pgAdmin Outer Join

Kør derefter de tre outer join-varianter i pgAdmin ved hjælp af nedenstående trin.

Venstre ydre samling

Trin 1) Log ind på din pgAdmin-konto.

Trin 2)

  • Fra navigationslinjen til venstre - Klik på Databaser.
  • Klik på Demo.

pgAdmin Venstre Ydre Join

Trin 3) Indtast forespørgslen i forespørgselseditoren:

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

Trin 4) Klik på knappen Udfør.

pgAdmin Venstre Ydre Join

Det skal returnere følgende:

pgAdmin Venstre Ydre Join

Højre ydre samling

Trin 1) Log ind på din pgAdmin-konto.

Trin 2)

  • Fra navigationslinjen til venstre - Klik på Databaser.
  • Klik på Demo.

pgAdmin Højre Ydre Join

Trin 3) Indtast forespørgslen i forespørgselseditoren:

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

Trin 4) Klik på knappen Udfør.

pgAdmin Højre Ydre Join

Det skal returnere følgende:

pgAdmin Højre Ydre Join

Fuld ydre tilslutning

Trin 1) Log ind på din pgAdmin-konto.

Trin 2)

  • Fra navigationslinjen til venstre - Klik på Databaser.
  • Klik på Demo.

pgAdmin Fuld Outer Join

Trin 3) Indtast forespørgslen i forespørgselseditoren:

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

Trin 4) Klik på knappen Udfør.

pgAdmin Fuld Outer Join

Det skal returnere følgende:

pgAdmin Fuld Outer Join

Download databasen brugt i denne vejledning

Ofte Stillede Spørgsmål

En INNER JOIN returnerer kun rækker, der matcher i begge tabeller. En OUTER JOIN bevarer også umatchede rækker, udfylder manglende kolonner med NULL og kan være venstre-, højre- eller fuld-tabel afhængigt af hvilken tabel der bevares.

En JOIN kombinerer kolonner fra forskellige tabeller side om side ved hjælp af en matchende nøgle, der udvider hver række. En UNION stabler rækkerne fra to resultatsæt lodret og kræver det samme antal kolonner.

En selvtilslutning forbinder en tabel med sig selv ved hjælp af to tabelaliasser. Det er nyttigt til at sammenligne rækker i én tabel, f.eks. ved at matche medarbejdere med de ledere, der er gemt i den samme tabel.

En CROSS JOIN returnerer det kartesiske produkt, hvor hver række i den første tabel parres med hver række i den anden. Den bruger ingen ON-betingelse, så den kan hurtigt producere meget store resultatsæt.

Ja. Du kan kæde flere JOIN-klausuler sammen i én forespørgsel og tilføje hver ekstra tabel med en anden JOIN- og ON-betingelse. PostgreSQL evaluerer dem for at opbygge et enkelt kombineret resultatsæt.

AI-assistenter som GitHub Copilot foreslår den korrekte join-type, skriver ON-betingelsen fra fremmednøgler og markerer en manglende betingelse, der ville forårsage et utilsigtet kartesisk produkt, hvilket reducerer almindelige join-fejl.

Ja. AI-assistenter kan læse en forespørgselsplan, anbefale indekser på join-kolonner og omskrive join-rækkefølge eller -betingelser. Databasen håndhæver stadig korrekthed, så gennemgå hvert forslag, før du kører det i produktion.

Ingen enkelt join er altid hurtigst; ydeevnen afhænger af indekser, rækkeantal og filtre. INNER JOINs på indekserede nøgler er normalt effektive, mens FULL OUTER JOINs på store, uindekserede tabeller har tendens til at være de dyreste.

Opsummer dette indlæg med: