INTERSECT ed EXCEPT per i confronti
Trovare le righe comuni e diverse tra due insiemi di dati
INTERSECT ed EXCEPT per i confronti è una lezione SQL Interview Prep gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Interview Prep include 4 lezioni in totale.
Gli operatori di confronto
INTERSECT ed EXCEPT sono gli operatori di insieme utilizzati per confrontare due insiemi di risultati, invece di unirli. Gli intervistatori li propongono con domande come "quali clienti sono presenti in entrambi gli elenchi" oppure "quali righe sono presenti in A ma non in B".
INTERSECT= righe presenti in entrambe le query.EXCEPT= righe presenti nella prima query ma non nella seconda.
Cosa restituisce INTERSECT
INTERSECT restituisce solo le righe distinte presenti in entrambi gli insiemi di risultati. Una riga deve corrispondere in ogni colonna per essere considerata comune.
Come UNION, un INTERSECT semplice rimuove i duplicati e restituisce ogni riga comune una sola volta.
SELECT customer_id FROM orders_2023
INTERSECT
SELECT customer_id FROM orders_2024;
-- customers who ordered in BOTH yearsCosa restituisce EXCEPT
EXCEPT (chiamato MINUS in Oracle) restituisce le righe distinte della prima query che non compaiono nella seconda. È direzionale: A EXCEPT B è diverso da B EXCEPT A.
È il modo naturale per trovare i record mancanti in un secondo insieme di dati.
SELECT customer_id FROM orders_2023
EXCEPT
SELECT customer_id FROM orders_2024;
-- ordered in 2023 but NOT in 2024 (churned)EXCEPT non è simmetrico
Un punto molto apprezzato nei colloqui: EXCEPT è direzionale. Scambiare le due query significa rispondere a una domanda diversa.
A EXCEPT B= presente in A, non in B.B EXCEPT A= presente in B, non in A.
INTERSECT, al contrario, è simmetrico: A INTERSECT B equivale a B INTERSECT A.
-- new customers in 2024 (not seen in 2023):
SELECT customer_id FROM orders_2024
EXCEPT
SELECT customer_id FROM orders_2023;Duplicati e impostazione predefinita DISTINCT
INTERSECT ed EXCEPT standard operano su righe distinte, come UNION. Le righe duplicate in input vengono accorpate prima del confronto.
Alcuni database supportano INTERSECT ALL ed EXCEPT ALL, che rispettano la molteplicità, ma sono meno comuni. Se l'intervistatore non specifica ALL, presuma una semantica distinta.
SELECT city FROM a
INTERSECT ALL
SELECT city FROM b;
-- multiplicity-aware (Postgres supports this; MySQL 8+ too)Confrontare righe intere per verificarne l'uguaglianza
Entrambi gli operatori confrontano le righe intere in tutte le colonne selezionate. Due righe sono uguali solo quando ogni colonna corrisponde. Questo li rende perfetti per verificare se due tabelle contengono dati identici.
Selezioni l'intero insieme di colonne che desidera confrontare, in modo che il confronto sia significativo.
SELECT id, name, email FROM prod_users
EXCEPT
SELECT id, name, email FROM staging_users;
-- rows in prod that differ from / are missing in stagingIl modello del confronto bidirezionale tra tabelle
Per verificare se due tabelle sono identiche, esegua EXCEPT in entrambe le direzioni e combini le differenze. Se il risultato combinato è vuoto, le tabelle corrispondono esattamente.
Questa è una risposta classica nei colloqui sulla convalida dei dati per i controlli di migrazione e riconciliazione.
(SELECT * FROM table_a EXCEPT SELECT * FROM table_b)
UNION ALL
(SELECT * FROM table_b EXCEPT SELECT * FROM table_a);
-- empty result => tables are identicalCome vengono trattati i valori NULL
All'interno delle operazioni di insieme, due valori NULL vengono trattati come uguali tra loro ai fini dell'abbinamento. Questo è diverso dal comportamento consueto, in cui NULL = NULL restituisce UNKNOWN.
Di conseguenza, una riga con un NULL in una colonna corrisponderà a un'altra riga con NULL nella stessa posizione. Gli intervistatori verificano questo aspetto perché contraddice le normali regole di confronto.
-- (1, NULL) INTERSECT (1, NULL) -> returns (1, NULL)
SELECT id, region FROM a
INTERSECT
SELECT id, region FROM b;Precedenza tra gli operatori di insieme
Quando si combinano più operatori, nello standard SQL INTERSECT ha in genere una precedenza maggiore rispetto a UNION ed EXCEPT. Per evitare ambiguità, racchiuda i rami tra parentesi.
Dichiarare in un colloquio che utilizza le parentesi per rendere esplicito l'ordine di valutazione dimostra maturità.
(SELECT id FROM a EXCEPT SELECT id FROM b)
UNION
(SELECT id FROM c);Scegliere tra INTERSECT/EXCEPT e le join
INTERSECT ed EXCEPT sono concisi e confrontano righe intere con deduplicazione incorporata. Le join sono più flessibili: consentono di restituire colonne aggiuntive e di scegliere come gestire i duplicati.
Preferisca gli operatori di insieme quando la domanda riguarda esclusivamente le righe comuni o mancanti. Passi alle join quando ha bisogno di colonne da entrambi i lati o quando il dialetto non supporta questi operatori.
Riunire i concetti
Un riepilogo che può recitare è: "INTERSECT restituisce le righe presenti in entrambe le query ed è simmetrico; EXCEPT restituisce le righe presenti nella prima ma non nella seconda ed è direzionale. Entrambi confrontano righe intere, trattano i NULL come uguali e restituiscono per impostazione predefinita risultati distinti."
Aggiunga il metodo del confronto bidirezionale con EXCEPT per la domanda successiva sulla riconciliazione dei dati e avrà coperto completamente l'argomento.
Controllo rapido
Desidera ottenere i clienti che hanno effettuato un ordine nel 2023 ma NON nel 2024 (clienti che hanno abbandonato il servizio).
Riepilogo
Punti chiave:
INTERSECT= righe presenti in entrambe le query; è simmetrico.EXCEPT(in Oracle: MINUS) = righe presenti nella prima query ma non nella seconda; è direzionale.- Entrambi confrontano righe intere e restituiscono per impostazione predefinita un output distinto.
- I NULL vengono trattati come uguali ai fini dell'abbinamento.
- Un
EXCEPTbidirezionale produce un confronto completo tra le tabelle.
Domande Frequenti
La lezione «INTERSECT ed EXCEPT per i confronti» è gratuita?
Sì — il testo completo di «INTERSECT ed EXCEPT per i confronti» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Interview Prep, passa a CoddyKit PRO. Il corso SQL Interview Prep include 4 lezioni in totale.
Cosa imparerò in «INTERSECT ed EXCEPT per i confronti»?
Trovare le righe comuni e diverse tra due insiemi di dati Eserciti SQL Interview Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Interview Prep?
Non è richiesta alcuna esperienza precedente. SQL Interview Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «INTERSECT ed EXCEPT per i confronti»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Interview Prep?
Sì. Ogni lezione SQL Interview Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- UNION e UNION ALL
- Compatibilità del numero e dei tipi di colonne
- INTERSECT ed EXCEPT per i confronti
- Simulare le operazioni sugli insiemi con i join