0Pricing
SQL Interview Prep · Lezione

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 SQL 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 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.

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 columns

Regola 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) -> OK

Conta 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 column

I 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, location

Conversione 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 DECIMAL

Riempire 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 -> compatible

Queste 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 UNION

La 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 SQL Interview Prep, passa a CoddyKit PRO. Il corso SQL 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 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 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 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

  1. UNION e UNION ALL
  2. Compatibilità del numero e dei tipi di colonne
  3. INTERSECT ed EXCEPT per i confronti
  4. Simulare le operazioni sugli insiemi con i join
← Torna a SQL Interview Prep