Corsi on-line
Chiudi
Newsletter:
  • Seguici su Facebook
  • Seguici su Twitter
  • Seguici su Google+
  • Seguici via RSS
  • Seguici col tuo Smartphone

Il contrario di una INNER JOIN: ovvero ottenere i record non corrispondenti

Articolo scritto da Max Bossi

Chi ha conoscenze di SQL sa cosa sono le JOIN. Nelle nostre guide ed in diversi articoli abbiamo spiegato come funzionano le JOIN e come è possibile creare delle relazioni fra le diverse tabelle di un database.

L'esigenza più comune soddisfatta dallo strumento JOIN è quella di individuare le corrispondenze tra due tabelle; in tal caso soccorre la clausola INNER JOIN che, appunto, individua e restituisce i campi che soddisfano la corrispondenza cercata all'interno delle due o più tabelle coinvolte nella JOIN.

(L'articolo continua più sotto...)

Decisamente meno intuitiva è l'esigenza contraria di individuare i campi che non hanno una corrispondenza all'interno della JOIN.

Facciamo un esempio.
Supponiamo di dover gestire un database di un sito di e-commerce composto da due sole tabelle:

Ora si supponga di voler estrarre due diverse liste di clienti: 1) la lista dei clienti che hanno già fatto un ordine; 2) la lista dei clienti che non hanno ancora comprato nulla.

Soddisfare la prima esigenza, come sappiamo, è piuttosto semplice:

SELECT clienti.nome, clienti.cognome
FROM clienti
INNER JOIN ordini
ON clienti.id = ordini.id_cliente
ORDER BY clienti.cognome ASC
e fin qui nessun problema.

Ma come possiamo fare per ottenere il risultato inverso? Beh... per prima cosa non utilizzeremo una INNER JOIN ma una LEFT JOIN al fine di cercare non una corrispondenza piena ma una parziale dove, comunque, i risultati della tabella di sinistra vengono restituiti ugualmente.
Fatto questo andremo a cercare (mediante la clausola WHERE) i record mancanti (cioè non riscontrati all'interno della relazione) quindi identificati come NULL (nel linguaggio SQL si definisce come NULL una sorta di "valore speciale" che identifica un'assenza di valore.).

Vediamo il codice:

SELECT clienti.nome, clienti.cognome
FROM clienti
LEFT JOIN ordini
ON clienti.id = ordini.id_cliente
WHERE ordini.id_cliente IS NULL
ORDER BY clienti.cognome ASC
Il risultato sarà, appunto, l'elenco dei nominativi dei nostri clienti che non hanno mai acquistato nulla.

Corsi
Corso MS AccessCorso MS Access
Impara a creare e gestire database in maniera semplice e veloce. A partire da 39 €.
Corso MySQLCorso MySQL
Gestione del database open-source. A partire da 49 €.
Corso SQL e DatabaseCorso SQL e Database
Creazione e gestione di database relazionali. A partire da 39 €.
Vedi anche...
Annunci

Mr.Webmaster

Pubblicità
Chi Siamo
Contattaci
Collabora
Note Legali
© 2003 - 2012 Mr.Webmaster - Il portale dei Webmaster Italiani - Tutti i diritti riservati | Powered by IKIweb Internet Media S.r.l. - PIVA 02848390122