Unione esterna SQL

Unione Esterna Sql



Inutile dire che i join sono una delle caratteristiche più identificabili dei database relazionali. I join ci consentono di combinare i dati di una o più tabelle in base a una condizione correlata per creare un'operazione sui dati coerente.

Esistono vari tipi di join in SQL, ciascuno con un modo unico di gestire i dati dalle tabelle partecipanti o dal set risultante. Uno dei tipi più comuni di join in SQL è l'OUTER JOIN.







Un OUTER JOIN in SQL recupera tutte le righe corrispondenti dalle tabelle coinvolte nonché le righe non corrispondenti da una o entrambe le tabelle. È utile quando hai a che fare con tabelle che contengono valori NULL o set mancanti.



Esploriamo ulteriormente cosa fanno questi join, come funzionano e come possiamo utilizzarli in un database SQL.



Requisiti:

Per questo tutorial lavoreremo con MySQL 8.0 e utilizzeremo il database di esempio Sakila. Tuttavia, sentiti libero di utilizzare qualsiasi altro set di dati che ritieni applicabile.





Tipi di join esterni

Esistono tre tipi principali di OUTER JOINS in SQL. Questi tipi di OUTER JOIN includono:

  1. Sinistra OUTER JOIN

  2. Nel caso di LEFT OUTER JOINS, il join recupera tutte le righe dalla tabella di sinistra e solo le righe corrispondenti dalla tabella di destra. Se non sono presenti righe corrispondenti dalla tabella di destra, il join restituisce i valori NULL per le colonne della tabella di destra.



  3. GIUNTI ESTERNI a destra

  4. Questo è simile a RIGHT OUTER JOIN. Tuttavia, recupera tutte le righe dalla tabella di destra ma solo le righe corrispondenti dalla tabella di sinistra. Se non sono presenti righe corrispondenti dalla tabella di sinistra, l'unione include i valori NULL per le colonne della tabella di sinistra.

  5. JOIN ESTERNI COMPLETI

  6. Infine, abbiamo i FULL OUTER JOINS. Questo tipo di unione combina le unioni esterne DESTRA e SINISTRA. Di conseguenza, il join recupera tutte le righe quando esiste una corrispondenza nella tabella di sinistra o di destra. Se non c'è corrispondenza, il join restituisce i valori NULL per le colonne della tabella senza corrispondenza.

Sintassi dell'SQL OUTER JOIN

Quanto segue esprime la sintassi di un SQL OUTER JOIN. È bene però tenere presente che la sintassi può variare leggermente a seconda del motore del database di destinazione.

Quella che segue è una struttura generale:

SELEZIONA colonne
DALLA tabella1
[SINISTRA | GIUSTO | FULL] OUTER JOIN tabella2
ON tabella1.nome_colonna = tabella2.nome_colonna;

La sintassi di un OUTER JOIN in SQL è piuttosto autoesplicativa.

Esempi:

Diamo un'occhiata ad alcuni esempi di utilizzo su come possiamo applicare i vari tipi di OUTER JOINS in SQL.

Come accennato, utilizzeremo il database di esempio Sakila per la dimostrazione. In questo caso utilizziamo le tabelle “cliente” e “pagamento”.

Esempio 1: LEFT OUTER JOIN

Cominciamo con un OUTER JOIN. Supponiamo di voler recuperare tutte le informazioni sul cliente insieme alle informazioni di pagamento, se disponibili.

Ciò rende applicabile un LEFT OUTER JOIN poiché vogliamo tutte le informazioni sul cliente (a sinistra) e le informazioni sul pagamento, se disponibili (a destra).

Se il cliente non ha effettuato alcun pagamento, il join mostrerà i valori NULL per le colonne relative al pagamento.

Un esempio è il seguente:

SELEZIONARE
c.id_cliente,
c.nome,
c.cognome,
importo p.,
p.data_pagamento
DA
cliente c
LEFT OUTER JOIN pagamento p
SU
c.id_cliente = p.id_cliente;

Nella query specificata includiamo le colonne 'customer_id', 'first_name' e 'last_name' dalla tabella 'customer'. Includiamo anche l'importo e la “data_pagamento” dalla tabella “pagamento”.

Eseguiamo quindi un LEFT OUTER JOIN tra le tabelle 'customer' e 'payment' in base al 'customer_id'.

Questi sono tutti i clienti (indipendentemente dal fatto che il pagamento sia stato effettuato o meno) insieme ai relativi dettagli di pagamento (se presenti).

Un esempio di output è il seguente:

Esempio 2: RIGHT OUTER JOIN

Ora passiamo al RIGHT OUTER JOIN. Supponiamo di voler includere tutte le informazioni di pagamento e il cliente associato in questo caso, se presente.

In questo caso, se un pagamento viene effettuato da un cliente, l'adesione visualizzerà i dettagli di quel cliente. Se è presente un pagamento senza cliente associato, verranno visualizzati i valori NULL per le colonne relative al cliente.

SELEZIONARE
c.id_cliente,
c.nome,
c.cognome,
importo p.,
p.data_pagamento
DA
cliente c
Pagamento RIGHT OUTER JOIN p
SU
c.id_cliente = p.id_cliente;

L'insieme risultante è il seguente:

Esempio 3: FULL OUTER JOIN

Un FULL OUTER JOIN, invece, recupera tutte le informazioni sul cliente e il pagamento. Ciò include tutti i clienti e tutti i pagamenti e mostra i valori NULL dove non esiste corrispondenza tra le tabelle.

SELEZIONARE
c.id_cliente,
c.nome,
c.cognome,
importo p.,
p.data_pagamento
DA
cliente c
Pagamento FULL OUTER JOIN p
SU
c.id_cliente = p.id_cliente;

È bene tenere presente che MySQL non supporta nativamente un FULL OUTER JOIN. Devi fare un po' di magia jiujitsu con LEFT JOIN, UNION e RIGHT JOIN. Abbastanza fastidioso, potremmo aggiungere.

Conclusione

In questo tutorial, abbiamo imparato tutto sugli OUTER JOINS. Abbiamo imparato cos'è un OUTER JOIN in SQL, i tipi di OUTER JOINS e gli esempi su come utilizzare questi tipi di OUTER JOINS.