PostgreSQL Tipi di giunzione: interna, esterna, sinistra, destra

โšก Riepilogo intelligente

PostgreSQL Le join recuperano e combinano righe da due o piรน tabelle utilizzando una chiave condivisa e includono join interne come theta, EQUI e natural, oltre a join esterne che coprono i risultati a sinistra, a destra e completi.

  • ๐Ÿ”— Combina: Le join uniscono colonne provenienti da piรน tabelle in base a una chiave comune.
  • ๐ŸŽฏ Unione interna: Le join interne restituiscono solo le righe in cui la condizione di join รจ soddisfatta.
  • โฌ…๏ธ Sinistra Join: LEFT OUTER JOIN mantiene tutte le righe della tabella di sinistra, aggiungendo valori NULL per le righe di destra non corrispondenti.
  • โžก๏ธ Partecipa a destra: RIGHT OUTER JOIN mantiene tutte le righe della tabella di destra, aggiungendo valori NULL per le righe di sinistra non corrispondenti.
  • ???? Adesione completa: FULL OUTER JOIN restituisce tutte le righe di entrambe le tabelle con valori NULL laddove non esiste una corrispondenza.
  • ๐Ÿค– Aiuto tramite IA: Gli assistenti IA selezionano il tipo di join corretto e scrivono la condizione ON.

PostgreSQL Unisciti ai tipi

Cosa sono i Join? PostgreSQL?

PostgreSQL Entra a far parte Le join vengono utilizzate per recuperare dati da piรน tabelle. Con le join, รจ possibile combinare le istruzioni SELECT e JOIN in un'unica istruzione. Viene aggiunta una condizione JOIN all'istruzione e vengono restituite tutte le righe che soddisfano tale condizione. I valori provenienti da tabelle diverse vengono combinati in base a colonne comuni. La colonna comune รจ solitamente una chiave primaria nella prima tabella e una chiave esterna nella seconda.

PostgreSQL Unisciti ai tipi

Sono disponibili due tipi di join PostgreSQL:

  • giunzioni interne
  • Unioni esterne

PostgreSQL unione interna

Sono disponibili 3 tipi di inner join PostgreSQL:

  • Partecipazione theta
  • Unione naturale
  • Aderisci all'EQUI

Theta Partecipa

Un theta join consente di unire due tabelle in base alla condizione rappresentata da theta. I join theta possono funzionare con tutti gli operatori di confronto. Nella maggior parte dei casi, il theta join viene definito inner join.

Il theta join รจ il tipo piรน semplice di JOIN. Restituirร  tutte le righe delle tabelle in cui la condizione JOIN รจ soddisfatta.

Sintassi:

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

Consideriamo le seguenti tabelle del database Demo:

Libro:

PostgreSQL Theta Partecipa

Prezzo:

PostgreSQL Theta Partecipa

Vogliamo vedere il nome di ogni libro e il prezzo corrispondente. Possiamo eseguire il seguente comando:

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

Verrร  restituito quanto segue:

PostgreSQL Theta Partecipa

Solo 3 righe soddisfacevano la condizione di unione.

EQUI Partecipa

L'unione EQUI ci fornisce un modo per unire due tabelle in base alla relazione chiave primaria/chiave esterna. Per esempio:

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

Verrร  restituito quanto segue:

PostgreSQL EQUI Partecipa

I record sono stati restituiti da entrambe le tabelle in base alle colonne comuni, ovvero la colonna id.

unione naturale

Questo tipo di join ci fornisce un altro modo di scrivere un join EQUI. Possiamo migliorare il nostro esempio precedente aggiungendo la parola chiave NATURAL come mostrato di seguito:

SELECT *
FROM Book
NATURAL JOIN Price;

Verrร  restituito quanto segue:

PostgreSQL unione naturale

รˆ stata restituita solo una colonna ID. Il NATURAL JOIN ha potuto notare che la colonna id รจ comune nelle due tabelle. Ne รจ stato restituito solo uno.

PostgreSQL unione esterna

Sono disponibili 3 tipi di Outer Join PostgreSQL:

  • Join esterno sinistro
  • Giunto esterno destro
  • Join esterno completo

PostgreSQL Join esterno sinistro

Il LEFT OUTER JOIN restituirร  tutte le righe nella tabella sul lato sinistro e solo le righe nella tabella sul lato destro in cui la condizione di join รจ stata soddisfatta.

Sintassi:

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

Dobbiamo vedere il nome di ogni libro e il prezzo corrispondente. Possiamo eseguire il seguente comando:

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

Questo restituisce quanto segue:

PostgreSQL Join esterno sinistro

Sono state restituite tutte e 4 le righe della tabella Book. Solo 3 righe della tabella dei prezzi soddisfano la condizione di unione. Quindi sono stati restituiti. L'ultimo libro non ha un valore di prezzo corrispondente.

PostgreSQL Giunto esterno destro

Il RIGHT OUTER JOIN restituisce tutte le righe nella tabella sul lato destro e le righe nella tabella sul lato sinistro in cui la condizione di join รจ stata soddisfatta.

Sintassi:

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

Per esempio:

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

Questo restituisce quanto segue:

PostgreSQL Giunto esterno destro

Sono state restituite tutte le righe della tabella Prezzo. Sono state restituite solo le righe della tabella Libro che soddisfacevano la condizione di join. La terza riga non ha alcun valore per il nome poichรฉ non รจ stata trovata alcuna corrispondenza.

Partecipazione esterna completa PostgreSQL

Questo tipo di JOIN restituirร  tutte le righe nella tabella sul lato sinistro e tutte le righe nella tabella sul lato destro con valori null dove la condizione di join non รจ soddisfatta.

Sintassi:

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

Per esempio:

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

Questo restituisce quanto segue:

PostgreSQL Join esterno completo

Sono state restituite tutte le righe di tutte le tabelle, con valori null dove non รจ stata trovata alcuna corrispondenza.

Utilizzando pgAdmin

Le operazioni sopra descritte possono essere eseguite in pgAdmin nel modo seguente. Le sezioni successive illustrano passo passo ciascun tipo di join.

pgAdmin Partecipazione interna

I passaggi seguenti mostrano come eseguire ciascuna variante di inner join in pgAdmin.

Come utilizzare Theta Partecipa PostgreSQL utilizzando pgAdmin

Di seguito sono riportati i passaggi per utilizzare Theta Join in PostgreSQL utilizzando pgAdmin:

Passaggio 1) Accedi al tuo account pgAdmin

Apri pgAdmin e accedi utilizzando le tue credenziali

Passaggio 2) Creare un database demo

  • Dalla barra di navigazione a sinistra, fare clic su Database.
  • Fare clic su Demo.

pgAdmin Partecipazione interna

Passaggio 3) Digitare la query

Digita la query seguente nell'editor di query:

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

Passaggio 4) Eseguire la query

Fare clic sul pulsante Esegui

pgAdmin Partecipazione interna

Dovrebbe restituire quanto segue:

pgAdmin Partecipazione interna

EQUI Partecipa

Passo 1) Accedi al tuo account pgAdmin.

Passo 2)

  • Dalla barra di navigazione a sinistra, fare clic su Database.
  • Fare clic su Demo.

pgAdmin EQUI Partecipa

Passo 3) Digita la query nell'editor di query:

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

Passo 4) Fare clic sul pulsante Esegui.

pgAdmin EQUI Partecipa

Dovrebbe restituire quanto segue:

pgAdmin EQUI Partecipa

unione naturale

Passo 1) Accedi al tuo account pgAdmin.

Passo 2)

  • Dalla barra di navigazione a sinistra, fare clic su Database.
  • Fare clic su Demo.

pgAdmin Partecipazione naturale

Passo 3) Digita la query nell'editor di query:

SELECT *
FROM Book
NATURAL JOIN Price;

Passo 4) Fare clic sul pulsante Esegui.

pgAdmin Partecipazione naturale

Dovrebbe restituire quanto segue:

pgAdmin Partecipazione naturale

pgAdmin Join interno semplice

Passo 1) Accedi al tuo account pgAdmin.

Passo 2)

  • Dalla barra di navigazione a sinistra, fare clic su Database.
  • Fare clic su Demo.

pgAdmin Join interno semplice

Passo 3) Digita la query nell'editor di query:

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

Passo 4) Fare clic sul pulsante Esegui.

pgAdmin Join interno semplice

Dovrebbe restituire quanto segue:

pgAdmin Join interno semplice

pgAdmin Join esterno

Successivamente, esegui le tre varianti di outer join in pgAdmin seguendo i passaggi descritti di seguito.

Join esterno sinistro

Passo 1) Accedi al tuo account pgAdmin.

Passo 2)

  • Dalla barra di navigazione a sinistra, fare clic su Database.
  • Fare clic su Demo.

pgAdmin Join esterno sinistro

Passo 3) Digita la query nell'editor di query:

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

Passo 4) Fare clic sul pulsante Esegui.

pgAdmin Join esterno sinistro

Dovrebbe restituire quanto segue:

pgAdmin Join esterno sinistro

Giunto esterno destro

Passo 1) Accedi al tuo account pgAdmin.

Passo 2)

  • Dalla barra di navigazione a sinistra, fare clic su Database.
  • Fare clic su Demo.

pgAdmin Join esterno destro

Passo 3) Digita la query nell'editor di query:

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

Passo 4) Fare clic sul pulsante Esegui.

pgAdmin Join esterno destro

Dovrebbe restituire quanto segue:

pgAdmin Join esterno destro

Join esterno completo

Passo 1) Accedi al tuo account pgAdmin.

Passo 2)

  • Dalla barra di navigazione a sinistra, fare clic su Database.
  • Fare clic su Demo.

pgAdmin Join esterno completo

Passo 3) Digita la query nell'editor di query:

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

Passo 4) Fare clic sul pulsante Esegui.

pgAdmin Join esterno completo

Dovrebbe restituire quanto segue:

pgAdmin Join esterno completo

Scarica il database utilizzato in questo tutorial

DOMANDE FREQUENTI

Un INNER JOIN restituisce solo le righe corrispondenti in entrambe le tabelle. Un OUTER JOIN mantiene anche le righe non corrispondenti, riempiendo le colonne mancanti con NULL, e puรฒ essere a sinistra, a destra o completo a seconda della tabella che viene conservata.

Un'operazione JOIN unisce colonne di tabelle diverse affiancandole, utilizzando una chiave corrispondente e allargando ciascuna riga. Un'operazione UNION, invece, impila verticalmente le righe di due set di risultati e richiede lo stesso numero di colonne.

Un self join unisce una tabella a se stessa utilizzando due alias di tabella. รˆ utile per confrontare righe all'interno di una tabella, ad esempio per associare i dipendenti ai responsabili memorizzati nella stessa tabella.

Un'operazione CROSS JOIN restituisce il prodotto cartesiano, accoppiando ogni riga della prima tabella con ogni riga della seconda. Non utilizza alcuna condizione ON, quindi puรฒ produrre rapidamente set di risultati molto grandi.

Sรฌ. รˆ possibile concatenare diverse clausole JOIN in un'unica query, aggiungendo ogni tabella extra con un'ulteriore clausola JOIN e una condizione ON. PostgreSQL li valuta al fine di costruire un unico insieme di risultati combinati.

Gli assistenti basati sull'intelligenza artificiale, come GitHub Copilot, suggeriscono il tipo di join corretto, scrivono la condizione ON a partire dalle chiavi esterne e segnalano la mancanza di una condizione che potrebbe causare un prodotto cartesiano accidentale, riducendo cosรฌ i comuni errori di join.

Sรฌ. Gli assistenti basati sull'IA possono leggere il piano di esecuzione di una query, suggerire indici sulle colonne di join e riscrivere l'ordine o le condizioni di join. Il database, tuttavia, garantisce comunque la correttezza dei risultati, quindi รจ necessario esaminare attentamente ogni suggerimento prima di eseguirlo in produzione.

Non esiste un'unica join che sia sempre la piรน veloce; le prestazioni dipendono dagli indici, dal numero di righe e dai filtri. Le INNER JOIN su chiavi indicizzate sono generalmente efficienti, mentre le FULL OUTER JOIN su tabelle di grandi dimensioni non indicizzate tendono ad essere le piรน dispendiose.

Riassumi questo post con: