Analisi SQL

IN o EXISTS: quale scritta utilizzare?

La scelta diventa semplice quando si distingue l'appartenenza ad una lista e l'esistenza di un rapporto di parentela.

Team SQL.tn8min
Un valore viene confrontato con una raccolta quindi verificato da un segnale di esistenza

Stai testando un elenco o una relazione?

statut IN ('Pagato', 'In attesa') descrive un elenco chiuso. EXISTS è adatto quando è necessario preservare una fila esterna se una fila collegata soddisfa una condizione.

EXISTS evita di duplicare un cliente che ha più ordini corrispondenti, perché conta solo l'esistenza della prima corrispondenza.

I nomi, gli importi e i dati utilizzati in questo articolo sono fittizi e creati a scopo didattico.

La domanda è stata spiegata

Inizia definendo cosa dovrebbe rappresentare una riga del risultato. Questa decisione determina le colonne, i raggruppamenti e i controlli necessari.

L'esempio seguente isola il meccanismo principale. Eseguilo, osserva il risultato, quindi modifica una clausola alla volta per comprenderne l'effetto.

Clienti con un ordine pagato
SELECT c.id_client, c.nom
FROM clients c
WHERE EXISTS (
  SELECT 1
  FROM commandes co
  WHERE co.id_client = c.id_client
    AND co.statut = 'Pagato'
);

Leggi il risultato come un analista

La sottoquery è correlata da id_client. SELECT 1 indica che le colonne interne non vengono utilizzate nel risultato.

Fare attenzione a NOT IN se l'elenco può contenere NULL; NOT EXISTS spesso esprime più chiaramente l'assenza di una relazione.

  • Identificare la chiave di correlazione.
  • Testare un caso con più corrispondenze.
  • Metti alla prova un caso senza eguali.
  • Verificare l'eventuale presenza di NULL.

Errori che distorcono l'analisi

Una query può essere valida senza rispondere correttamente alla domanda. Gli errori più costosi spesso sono silenziosi: perimetro sbagliato, linea moltiplicata o valore mancante interpretato come zero.

Prima di condividere il risultato, confrontalo con un piccolo campione calcolato manualmente e mantieni la definizione dell'ambito con la query.

  • Mostrare colonne interne quando conta solo l'esistenza.
  • Dimentica la correlazione e rendi EXISTS vero per tutte le righe.
  • Utilizzare NOT IN con NULL imprevisto.
  • Unisci quindi aggiungi DISTINCT per compensare le ripetizioni.

Mettiti in pratica

Esercita EXISTS su ordini di grandi dimensioni, quindi modifica la soglia e osserva la popolazione trattenuta.

Il simulatore SQL di SQL.tn esegue solo query di lettura su dati fittizi nel tuo browser. Puoi provare più scritture e confrontare i risultati senza installare alcun software.

Metti in pratica questa guida.

Apri l’esercizio collegato, esegui la query e confronta il risultato atteso.

Inizia l’esercizio