Prepararsi a un colloquio sull’SQL è un’esigenza molto frequente. Le figure professionali che lavorano nell’ambito del data management sono sempre più numerose: data scientist, data engineer, data analyst, ecc. Inoltre una conoscenza di base dell’SQL è richiesta per praticamente tutte le figure che lavorano all’interno di un progetto informatico.
L’ispirazione per scrivere questo articolo mi è stata data da un mio studente di 47 anni che ha deciso di riqualificarsi nel mondo del lavoro. L’occasione giusta è arrivata da un colloquio presso un’importante società informatica. Uno dei requisiti imprescindibili è però la conoscenza del linguaggio SQL. Invece di abbattersi, ha visto in questa richiesta un’opportunità di miglioramento e di crescita personale.
In sole 16 ore di corso, grazie alle sue capacità, al suo impegno e a un mix di teoria e pratica “real world” (niente esercizi astratti ma vere e proprie simulazioni di mail di lavoro!) ha appreso con successo la logica per interrogare correttamente le tabelle di un database relazionale tramite il linguaggio SQL, imparando a utilizzare fluentemente i principali costrutti del linguaggio come le varie tipologie di join e il group by. Il tutto non poteva che tramutarsi in un colloquio di lavoro dall’esito positivo!
Ma veniamo al nocciolo dell’articolo. Voglio ora raccontarvi tre tra le domande più frequenti sull’SQL, a cui dovete essere pronti a rispondere in un colloquio di lavoro.
Qual è la differenza tra Where e Having?
Partiamo da una domanda all’apparenza semplice, ma che permette all’intervistatore di testare la conoscenza di due costrutti fondamentali dell’SQL, tra i quali si fa spesso confusione. L’obiettivo di entrambe le parole chiave è di filtrare i dati di una tabella, ma con una differenza: la where filtra i dati prima di un eventuale raggruppamento realizzato tramite il costrutto Group by, mentre l’Having effettua il filtro dopo che la Group by ha sortito il suo effetto.
Dunque nella where scriverò codice come
WHERE Importo > 100
poiché prima del raggruppamento il valore della colonna importo è specifico per ogni riga della tabella. Invece nella Having potrò scrivere
HAVING SUM(Importo) > 30000
Nell’Having occorre far precedere la colonna importo da una funzione di aggregazione come SUM/AVG/MIN/MAX.
Cos’è una chiave primaria?
Una risposta corretta in un colloquio sull’SQL che fa intuire una profonda conoscenza del linguaggio e dei database in generale è: la chiave primaria è un particolare vincolo (in inglese constraint) applicabile alla tabella, come sono vincoli anche le chiavi esterne, i tipi di colonne, le proprietà di null/not null e i vincoli check. In particolare il vincolo di chiave primaria impedisce la presenza di valori duplicati in una o più colonne. Ad esempio inserendo una chiave primaria su una coppia di colonne, le relative coppie di valori dovranno essere univoche, altrimenti il database solleverà un errore. Inoltre tutte le colonne all’interno della chiave primaria non potranno contenere null.
Cos’è un indice?
Questa domanda è molto frequente in un colloquio SQL per posizioni che hanno già esperienza nel settore. Vediamo come rispondere nel modo più esaustivo possibile. È importante sottolineare che esistono due tipi di indici:
- gli indici clustered comportano la riorganizzazione fisica dei dati già presenti in tabella ordinandoli secondo le colonne definite nell’indice clustered e rendendo dunque più veloci le query che utilizzano tali colonne. Una cosa importante da sapere è che la creazione di un vincolo di chiave primaria ha come effetto aggiuntivo quello di creare automaticamente il relativo indice clustered;
- gli indici non clustered sono una copia di una porzione dei dati di una tabella, ordinata per le colonne che definiscono tale indice. Essi hanno l’effetto di migliorare le performance delle query di estrazione dei dati che utilizzano queste colonne, con il side effect di aumentare la memoria occupata e rallentare le operazioni di aggiornamento del database.
Come prepararsi a un colloquio su SQL
- puoi leggere gratuitamente gli articoli della sezione SQL del mio blog
- accedere al video corso gratuito sull’SQL
- valutare la proposta della sezione formazione del mio sito