Compatibilità del numero e dei tipi di colonne
Le regole che i set di risultati devono rispettare per poter essere combinati e gli errori comuni di incompatibilità
Compatibilità del numero e dei tipi di colonne è una lezione Coding Interview Prep gratuita su CoddyKit. Questa è la lezione 2 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 Coding Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Coding Interview Prep include 4 lezioni in totale.
Le regole di compatibilità su cui insistono gli intervistatori
Ogni operazione di insieme (UNION, INTERSECT, EXCEPT) richiede che i due insiemi di risultati siano compatibili per UNION. Gli intervistatori lo chiedono per verificare se conosce i modi meno evidenti in cui queste query possono non funzionare.
La compatibilità è regolata da due principi: lo stesso numero di colonne e tipi di dati compatibili, posizione per posizione. Se uno dei due requisiti non è rispettato, si ottiene un errore o un risultato inatteso.
Regola 1: stesso numero di colonne
Entrambe le query devono proiettare lo stesso numero di colonne. Se la prima query restituisce tre colonne e la seconda ne restituisce due, il database rifiuta l'istruzione.
Questo è l'errore più comune nelle operazioni di insieme durante i colloqui, soprattutto quando qualcuno modifica un ramo e dimentica di modificare l'altro.
SELECT id, name, city FROM a
UNION
SELECT id, name FROM b;
-- ERROR: each UNION query must have the same number of columnsRegola 2: tipi compatibili in base alla posizione
Le colonne vengono abbinate in base alla posizione, non al nome. La prima colonna della prima query viene abbinata alla prima colonna della seconda query, e così via. Ogni coppia deve avere tipi compatibili.
Per compatibili si intende generalmente convertibili in modo implicito: un INT e un BIGINT non creano problemi; un INT e una DATE, in genere, no.
SELECT id, signup_date FROM a
UNION
SELECT id, signup_date FROM b;
-- positions: (int,date) vs (int,date) -> OKConta la posizione, non il nome
Una trappola frequente: le colonne possono avere nomi diversi e combinarsi comunque, purché le posizioni corrispondano in base al tipo. Al contrario, nomi corrispondenti ma disposti nell'ordine sbagliato disallineano i dati.
Legga sempre le operazioni di insieme colonna per colonna, in base alla posizione. Gli intervistatori inseriscono colonne scambiate proprio per verificare questo aspetto.
SELECT name, id FROM a
UNION ALL
SELECT id, name FROM b;
-- name<->id swapped: types may clash or data lands in wrong columnI nomi delle colonne nell'output
L'insieme di risultati prende i propri nomi delle colonne dalla prima query. Le etichette della seconda query vengono scartate. Per controllare le intestazioni, assegni gli alias alle colonne del primo ramo.
Per questo motivo, un ORDER BY successivo deve fare riferimento ai nomi della prima query oppure utilizzare le posizioni ordinali.
SELECT id AS user_id, city AS location FROM a
UNION ALL
SELECT id, town FROM b;
-- output headers: user_id, locationConversione implicita dei tipi
Quando due colonne abbinate in base alla posizione hanno tipi diversi ma compatibili, il motore sceglie un tipo di risultato abbastanza ampio da contenere entrambi. La combinazione di un INT e un DECIMAL produce generalmente un DECIMAL.
Menzionare questa conversione in un colloquio dimostra una conoscenza approfondita: sa che la colonna non genera un errore, ma viene promossa al tipo più ampio.
SELECT amount FROM int_table -- INT
UNION ALL
SELECT amount FROM dec_table; -- DECIMAL
-- result column is DECIMALRiempire le colonne mancanti con NULL
Quando due query hanno naturalmente strutture diverse, può allinearle aggiungendo colonne segnaposto. Una tecnica comune consiste nel selezionare NULL (spesso convertito in modo esplicito a un tipo) per riempire una posizione presente nell'altro ramo.
Convertire esplicitamente NULL evita che il motore debba dedurre un tipo e mantiene compatibili le colonne.
SELECT id, phone, CAST(NULL AS VARCHAR) AS email FROM a
UNION ALL
SELECT id, CAST(NULL AS VARCHAR), email FROM b;Un errore di incompatibilità dei tipi, passo per passo
In questo caso, la seconda colonna è una data in un ramo e una stringa nell'altro. I motori rigorosi rifiutano l'operazione; quelli più permissivi potrebbero eseguire una conversione imprevedibile. La soluzione sicura consiste nell'utilizzare un CAST esplicito, in modo che entrambi i lati concordino sul tipo.
Durante i colloqui, proponga il cast invece di affidarsi alla conversione implicita.
SELECT id, CAST(event_date AS VARCHAR) FROM a
UNION ALL
SELECT id, label FROM b;
-- both second columns now VARCHAR -> compatibleQueste regole valgono per tutti gli operatori di insieme
Le regole relative al numero di colonne e alla compatibilità dei tipi sono identiche per UNION, UNION ALL, INTERSECT ed EXCEPT. Tutti impilano verticalmente gli insiemi di risultati e richiedono input compatibili per UNION.
È quindi sufficiente una sola lista di controllo mentale per ogni operazione di insieme: contare le colonne, verificare i tipi in base alla posizione e controllare i nomi a partire dalla prima query.
SELECT id, city FROM a
INTERSECT
SELECT id, city FROM b;
-- same compatibility rules as UNIONLa lista di controllo preliminare
Prima di combinare gli insiemi di risultati, verifichi quanto segue:
- Lo stesso numero di colonne in ogni ramo.
- Ogni coppia in base alla posizione è compatibile per tipo (esegua un cast in caso di dubbio).
- Le colonne sono nello stesso ordine logico.
- Gli alias sono impostati nella prima query per ottenere nomi chiari nell'output.
Pronunciare questa lista di controllo durante un colloquio evita bug silenziosi di disallineamento.
Riunire i concetti
Gli errori di compatibilità sono per lo più evitabili. Gli errori sono evidenti quando il numero di colonne differisce, ma silenziosi quando le colonne vengono scambiate o convertite in modo inatteso. Leggere le query colonna per colonna, in base alla posizione, ed eseguire i cast in modo deliberato mantiene corrette le operazioni di insieme.
Una risposta sicura enuncia entrambe le regole, menziona l'abbinamento in base alla posizione e specifica che i nomi nell'output provengono dalla prima query.
Controllo rapido
Come decide SQL quali colonne di due rami UNION corrispondono tra loro?
Riepilogo
Punti chiave:
- Tutti gli operatori di insieme richiedono lo stesso numero di colonne in ogni ramo.
- Le colonne vengono abbinate in base alla posizione e ogni coppia deve avere tipi compatibili.
- I tipi compatibili possono essere convertiti in modo implicito in un tipo comune più ampio.
- Utilizzi
CAST(NULL AS type)per uniformare strutture diverse. - I nomi nell'output provengono dalla prima query.
Domande Frequenti
La lezione «Compatibilità del numero e dei tipi di colonne» è gratuita?
Sì — il testo completo di «Compatibilità del numero e dei tipi di colonne» è 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 Coding Interview Prep, passa a CoddyKit PRO. Il corso Coding Interview Prep include 4 lezioni in totale.
Cosa imparerò in «Compatibilità del numero e dei tipi di colonne»?
Le regole che i set di risultati devono rispettare per poter essere combinati e gli errori comuni di incompatibilità Eserciti Coding 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 Coding Interview Prep?
Non è richiesta alcuna esperienza precedente. Coding 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 2 di 4.
Quanto tempo richiede la lezione «Compatibilità del numero e dei tipi di colonne»?
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 Coding Interview Prep?
Sì. Ogni lezione Coding 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