Riepilogo: in questo tutorial, imparerai come usare la clausola PostgreSQLLEFT JOIN
per selezionare i dati da più tabelle.
Introduzione alla clausola LEFT JOIN di PostgreSQL
Supponiamo di avere due tabelle:A
eB
.,
Ogni riga della tabella A
può avere zero o molte righe corrispondenti della tabella B
mentre ogni riga della tabella B
ha una e una sola riga corrispondente nella tabella A
.
Per selezionare i dati dalla tabella A
che possono avere o meno righe corrispondenti nella tabella B
, si utilizza la clausola LEFT JOIN
.,
L’istruzione seguente illustra il LEFT JOIN
sintassi che si unisce al tavolo A
con la tabella B
:
Code language: SQL (Structured Query Language) (sql)
Per aderire al tavolo A
con la tabella B
tabella utilizzando un left join, attenersi alla seguente procedura:
- Primo, specificare le colonne in entrambe le tabelle da cui si desidera selezionare i dati nel
SELECT
clausola. - In secondo luogo, specificare la tabella di sinistra (tabella
A
) nella clausolaFROM
., - In terzo luogo, specificare la tabella corretta (table
B
) nella clausolaLEFT JOIN
e la condizione join dopo la parola chiaveON
.
La clausola LEFT JOIN
inizia a selezionare i dati dalla tabella di sinistra. Per ogni riga nella tabella di sinistra, confronta il valore nella colonnapka
con il valore di ogni riga nella colonnafka
nella tabella di destra.,
Se questi valori sono uguali, la clausola left join crea una nuova riga che contiene colonne che appaiono nella clausola SELECT
e aggiunge questa riga al set di risultati.
Nel caso in cui questi valori non siano uguali, la clausola left join crea anche una nuova riga che contiene colonne che appaiono nella clausola SELECT
. Inoltre, riempie le colonne che provengono dalla tabella destra con NULL.,
Il seguente diagramma di Venn illustra come il LEFT JOIN
clausola funziona:
Nota che il LEFT JOIN
è indicato anche come LEFT OUTER JOIN
.
PostgreSQL LEFT JOIN examples
Diamo un’occhiata alle seguenti tabellefilm
einventory
dal database di esempio.,
Ogni riga film
tabella può avere zero o più righe nel inventory
tabella. Ogni riga nella tabellainventory
ha una e una sola riga nella tabellafilm
.
La colonna film_id
stabilisce il collegamento tra le tabelle film
e inventory
.,
La seguente dichiarazione utilizza il LEFT JOIN
clausola join film
tabella con i inventory
tabella:
Quando una riga film
tabella non ha una riga corrispondente nel inventory
tabella, il valore del tag inventory_id
colonna della riga NULL
.,
La seguente istruzione aggiunge una clausola WHERE
per trovare i film che non sono nell’inventario:
La seguente istruzione restituisce lo stesso risultato., La differenza è che usa l’alias di tabella per rendere la query più conciso:
Se le due tabelle hanno lo stesso nome di colonna utilizzati nel ON
clausola, è possibile utilizzare i tag USING
sintassi simile a questa:
Questa tecnica è utile quando si desidera selezionare le righe da una tabella che non hanno corrispondenti righe di un’altra tabella.