Torna all'elenco degli articoli Articoli
Tempo di lettura: 13 minuti

Domande comuni per gli sviluppatori SQL di livello base

Avete mai sostenuto un colloquio per una posizione SQL entry-level? Avete intenzione di candidarvi per un lavoro di questo tipo? Questo articolo vi aiuterà a sapere cosa aspettarvi e a prepararvi alle domande più comuni dei colloqui per sviluppatori SQL.

Dopo aver acquisito una conoscenza di base di SQL e della programmazione, probabilmente vi state chiedendo cosa fare dopo. O forse non ve lo state chiedendo! Sapete che ciò che avete imparato sparirà presto se non lo utilizzate regolarmente. Il modo migliore per mantenere le vostre conoscenze e, naturalmente, per imparare ancora di più è iniziare a lavorare come sviluppatore SQL. Ma non sapete quali domande aspettarvi in un colloquio. Quindi, esitate a candidarvi per un lavoro. Tuttavia, sapere cosa vi verrà chiesto non vi aiuterà molto, vero? Quello che vi serve sono le risposte! Per questo motivo, vi fornirò le domande del colloquio per sviluppatori SQL entry-level e, soprattutto, le risposte a tali domande.

Passiamo alle domande e alle risposte!

Domanda 1: Che cos'è un modello di dati relazionale? Spiega altri modelli di dati logici

Modello di dati relazionale

Il modello di dati relazionale è il modello di dati più diffuso. È stato introdotto nel 1969 da Edgar F. Codd. Un modello di dati relazionale si basa sul concetto matematico di relazione. Lo scopo delle relazioni è evitare la ridondanza dei dati, garantire l'integrità dei dati e accelerare il loro recupero.

Nel contesto del database, un modello di dati relazionale vede il database come una collezione di relazioni, in cui una relazione è semplicemente una tabella. La tabella, ovviamente, contiene valori. I tre elementi principali di una tabella sono le colonne, le righe e i valori.

Le colonne sono chiamate anche attributi, il che significa che rappresentano alcune proprietà per le quali i dati sono memorizzati. È importante notare che le colonne sono uniche, cioè non sono ammesse colonne con lo stesso nome in una tabella.

Ogni riga è una singola occorrenza degli attributi. Le righe sono anche chiamate record.

I valori si trovano alle intersezioni delle colonne e delle righe.

Modello di rete

Un altro modello comune è il modello di rete. È stato inventato da Charles Bachman nel 1969 per migliorare il modello gerarchico dei dati. Un modello di rete è rappresentato da un grafico che mostra i tipi di oggetto come nodi e i tipi di relazione come archi.

Modello di dati gerarchico

Questo modello è simile al modello di rete, ma è rappresentato da una struttura ad albero invece che da un grafo. Come il modello di rete, i tipi di oggetto sono rappresentati dai nodi, ma i tipi di relazione sono rappresentati dal legame "proprietari-membri" tra i dati.

Database relazionale a oggetti

Questo modello è simile al modello di dati relazionale e la sua creazione è stata ispirata dai linguaggi di programmazione orientati agli oggetti, come Java, C++, Visual Basic, .Net o C#. Questo modello vede un database come una collezione di oggetti memorizzati che consistono in tipi di dati personalizzati e metodi per la gestione dei dati. Ogni oggetto appartiene a una determinata classe. Tra ogni classe esistono relazioni di ereditarietà e di aggregazione.

Esistono naturalmente molti altri modelli di dati, come il modello documentale, lo schema a stella, il modello correlazionale, il database XML, ecc. Ma non è necessario conoscerli tutti. Il modello di dati relazionale è quello più comunemente utilizzato. E se vi siete candidati per un lavoro di sviluppatore SQL, probabilmente lavorerete con un database relazionale. Essere in grado di spiegare questi quattro modelli di dati dovrebbe essere sufficiente per un colloquio con uno sviluppatore SQL.

Domanda 2: Che cos'è un RDBMS?

DBMS è l'acronimo di "Database Management System". È un software che si frappone tra l'utente del database e il database stesso. Il DBMS opera con i dati secondo le istruzioni fornite dall'utente del database. Consente l'inserimento, la memorizzazione e il recupero dei dati. Seguendo questa logica, RDBMS è un Relational Database Management System, un DBMS creato appositamente per gestire i database relazionali. Secondo la logica del database relazionale, gli RDBMS memorizzano i dati in tabelle composte da colonne e righe. I RDBMS più diffusi sono Microsoft SQL Server, Oracle Database, MySQL e IBM DB2.

Domanda 3: Che cos'è il diagramma ER e quali sono i suoi componenti?

Chi aspira a ottenere buoni risultati in un colloquio per programmatori SQL, soprattutto se di livello base, dovrebbe sapere qualcosa sul diagramma ER. Il diagramma ER è un diagramma delle relazioni tra entità e mostra le relazioni tra le entità di un database. È uno degli strumenti più importanti utilizzati nella progettazione di un database. Ogni diagramma ER è composto da tre componenti:

  • Entità
  • Relazione
  • Attributo

Entità

L'entità è definita in senso lato come qualsiasi cosa su cui si possano raccogliere dati. È un oggetto o un concetto del processo aziendale per il quale si desidera memorizzare i dati. Ad esempio, un'azienda ha dei dipendenti, questi hanno numeri di identificazione personale (PIN) unici, lavorano in determinati reparti e producono determinati prodotti. Questo è un processo aziendale e in questo esempio i dipendenti, i reparti e i prodotti sono entità. Un'entità è composta da attributi. Diverse entità possono rappresentare insiemi di entità. Un insieme di entità è un numero qualsiasi di entità che possono essere considerate simili in base a determinate proprietà.

Relazioni

Le relazioni mostrano come un'entità sia collegata o associata a un'altra entità o ad altre entità. Nell'esempio precedente, i dipendenti e i PIN sono entità. Un dipendente può avere un solo PIN. Inoltre, un PIN può essere assegnato a un solo dipendente: un PIN è unico. Questa si chiama relazione uno-a-uno. Tali relazioni sono piuttosto rare nei database. Se un PIN può essere assegnato a un solo dipendente e viceversa, non è necessario avere il PIN come entità separata. Può essere l'attributo dell'entità dipendenti. Un altro esempio è rappresentato dalle entità dipendenti e reparti. La relazione tra loro è che un dipendente può lavorare solo in un reparto. Tuttavia, in un reparto possono esserci uno o più dipendenti. Questa è chiamata relazione uno-a-molti. La relazione tra dipendenti e prodotti è tale che un dipendente può produrre più di un prodotto. Inoltre, un prodotto può essere realizzato da più di un dipendente. Questa relazione è detta molti-a-molti.

Attributo

Un attributo rappresenta una proprietà di un'entità o di una relazione a cui può essere assegnato un determinato valore. Un insieme di attributi descrive un'entità o una relazione. Ad esempio, se i dipendenti sono un'entità, gli attributi possono essere nome, cognome, data di nascita, ecc. Gli attributi per i reparti come entità possono essere il nome del reparto, il capo reparto, il numero di dipendenti, ecc. I prodotti come entità possono essere descritti con i seguenti attributi: ID, nome del prodotto, colore del prodotto, prezzo del prodotto, ecc.

Domanda 4: Che cos'è la normalizzazione dei database? Spiegare le forme normali

La normalizzazione è il processo di organizzazione dei dati in un database relazionale utilizzato per ridurre la ridondanza dei dati e aumentarne l'integrità. L'obiettivo è creare un database efficiente, affidabile e flessibile. La normalizzazione viene attuata seguendo delle regole chiamate forme normali. Un database è solitamente considerato normalizzato quando soddisfa i requisiti di 3NF:

  • Prima forma normale (1NF)
  • Seconda forma normale (2NF)
  • Terza forma normale (3NF)

Prima forma normale (1NF)

Richiede che gli attributi (colonne della tabella) contengano solo valori atomici e singoli. Detto questo, lo scopo della 1NF è quello di garantire che non ci sia un insieme di dati mostrati come un singolo valore.

Seconda forma normale (2NF)

Per essere in 2NF, un database deve essere in 1NF. Deve inoltre garantire che tutti gli attributi dipendano solo dalla chiave primaria di una tabella. La chiave primaria è un attributo o un insieme di attributi che definisce in modo univoco ogni riga di una tabella. In altre parole, una chiave primaria può essere assegnata solo a una riga di una tabella.

Terza forma normale (3NF)

La 3NF richiede che un database sia ovviamente in 1NF e 2NF. Inoltre, non sono ammesse dipendenze transitive, ovvero tutti gli attributi che non sono una chiave primaria devono essere reciprocamente indipendenti. Non è consentito che un attributo dipenda da un altro attributo, che dipende da una chiave primaria.

Anche se esistono anche la forma normale di Boyce-Codd, la quarta forma normale, la quinta forma normale e altre forme aggiuntive, la conoscenza delle prime tre forme normali dovrebbe essere sufficiente per un colloquio SQL di base.

Domanda 5: Cosa sono i vincoli sugli attributi?

Un vincolo di attributo è una regola che limita il tipo di dati che possono essere inseriti come attributo specifico. Viene utilizzato per garantire l'integrità del database. I cinque vincoli di attributo più comuni sono:

  • NOT NULL - utilizzati per garantire che l'attributo non possa avere un valore NULL
  • CHECK - utilizzati quando il valore dell'attributo deve soddisfare una determinata condizione
  • UNIQUE - utilizzati quando un certo valore di attributo può essere inserito una sola volta
  • PRIMARY KEY - utilizzati per designare un attributo come chiave primaria, che deve essere UNIQUE e NOT NULL
  • FOREIGN KEY - utilizzato per mostrare la relazione tra le tabelle, cioè il valore dell'attributo di una tabella viene recuperato dall'attributo di un'altra tabella.

Domanda 6: Quali sono i sottolinguaggi e le parole chiave principali di SQL?

L'SQL può essere suddiviso in tre gruppi o sottolinguaggi:

  • Linguaggio di definizione dei dati (DDL)
  • Linguaggio di controllo dei dati (DCL)
  • Linguaggio di manipolazione dei dati (DML)

Linguaggio di definizione dei dati (DDL)

Questo sottolinguaggio viene utilizzato per creare, cancellare o modificare un determinato oggetto del database. Le tre parole chiave principali sono:

  • CREATE - crea un oggetto (ad esempio una tabella) in un database
  • DROP - cancella un oggetto in un database
  • ALTER - modifica un oggetto già esistente in un database

Linguaggio di controllo dei dati (DCL)

Il DCL è utilizzato per l'autorizzazione, la creazione di ruoli e il controllo dell'accesso a determinati dati in un database. Le due parole chiave principali sono:

  • GRANT - consente a un determinato utente di database di utilizzare un database o determinati oggetti di database
  • REVOKE - revoca o riduce l'autorizzazione concessa a un determinato utente del database.

Linguaggio di manipolazione dei dati (DML)

Questo sottolinguaggio SQL è costituito da parole chiave utilizzate per manipolare i dati, ossia aggiungere, modificare o rimuovere dati. Le parole chiave principali sono:

  • SELECT - utilizzato per recuperare dati e occasionalmente usato con altre parole chiave, come ad esempio:
    • FROM - utilizzate per scegliere la tabella da cui recuperare i dati
    • WHERE - utilizzate per recuperare i dati contenenti un valore specifico
    • GROUP BY - utilizzate per raggruppare i dati recuperati in base a un determinato attributo
    • HAVING - utilizzate con GROUP BY per identificare le righe da recuperare
    • ORDER BY - utilizzato per ordinare i dati recuperati in base a un determinato attributo
  • INSERT - utilizzato per inserire righe in una tabella già esistente
  • UPDATE - utilizzato per modificare i valori di una riga già esistente
  • MERGE - utilizzato per unire i dati di due o più tabelle
  • DELETE - usato per cancellare righe già esistenti da una tabella
  • TRUNCATE - usato per cancellare tutti i dati da una tabella
  • BEGIN WORK - utilizzato per segnare l'inizio di una transazione
  • COMMIT - usato per segnare la fine di una transazione
  • ROLLBACK - utilizzato per scartare tutte le modifiche dall'ultimo COMMIT o ROLLBACK

Si noti che, secondo alcuni documenti, TRUNCATE è una parola chiave DDL anziché DML.

Domanda 7: Spiegare la differenza tra TRUNCATE, DELETE e DROP

Ora che conoscete la risposta alla domanda precedente, questa dovrebbe essere facile. Come si è già appreso, TRUNCATE cancella tutti i dati dalla tabella. Se si usa DELETE, si possono eliminare alcune righe (se si usa la clausola WHERE), oppure si possono eliminare tutte le righe, come in TRUNCATE. La differenza principale è che DELETE rimuove i dati riga per riga e ogni riga cancellata viene registrata da RDBMS. Se si sta cercando di cancellare un'enorme quantità di dati, l'uso di DELETE sarebbe molto più lento di TRUNCATE, poiché TRUNCATE registra solo un'azione. Inoltre, è bene sapere che TRUNCATE non può essere usato se c'è una chiave esterna in una tabella. L'uso di TRUNCATE blocca anche la tabella, quindi è sconsigliato usarlo su tabelle condivise.

Ma cosa fa DROP? Sicuramente cancella qualcosa, ma cosa? La differenza principale è che TRUNCATE e DELETE sono usati per cancellare i dati da una tabella, ma non la tabella stessa. Utilizzando DROP, invece, si cancella l'intera tabella. L'eliminazione di una tabella comporta la scomparsa dei dati, ovviamente. Ma si cancelleranno anche gli indici, i trigger, i vincoli e le specifiche dei permessi.

Domanda 8: Quali sono i tipi di join in SQL?

I join in SQL sono utilizzati quando si vogliono utilizzare i dati di due o più tabelle contemporaneamente. Per fare ciò, è necessario collegare in qualche modo le tabelle, il che può essere fatto utilizzando i cinque tipi di join di SQL:

  • Unione incrociata
  • Unione interna
  • Unione esterna sinistra
  • Giunzione esterna destra
  • Giunzione esterna completa

Unioni incrociate

Questo tipo di join significa che ogni riga di una tabella viene unita a ogni riga di un'altra tabella. Moltiplica le righe. Se si lavora con un'enorme quantità di dati, questo non è consigliabile. Questo tipo di join è chiamato anche prodotto cartesiano. Per maggiori dettagli sulla cross join, consultare questo articolo.

Join interno

La join interna recupera i dati in cui i record della prima tabella sono uguali ai record della seconda tabella, in base a una condizione stabilita. C'è anche un articolo che spiega l'inner join in modo più dettagliato e che potrebbe aiutarvi a preparare il vostro colloquio.

Giunzione esterna sinistra

Quando si utilizza questo tipo di join, si recuperano tutte le righe dalla prima tabella (o sinistra) e le righe corrispondenti dalla seconda tabella (o destra). Se non ci sono righe corrispondenti nella seconda tabella, si otterrà un valore NULL.

Giunzione esterna destra

Il principio di utilizzo di questa join è lo stesso della join esterna sinistra. Restituisce tutte le righe della seconda tabella (o destra) e le righe corrispondenti della prima tabella (o sinistra). Se non ci sono righe corrispondenti nella prima tabella, si otterrà un valore NULL.

Giunzione esterna completa

Utilizzando questa unione, si recuperano tutte le righe della prima tabella e tutte le righe della seconda tabella. Se ci sono righe non corrispondenti, sia nella prima che nella seconda tabella, verranno visualizzate come valore NULL. C'è un ottimo articolo che spiega tutto quello che c'è da sapere sulle outer join, insieme agli esempi.

Vi sentite pronti per le domande del colloquio con gli sviluppatori SQL?

In questo articolo ho affrontato alcune domande e risposte di base che potrebbero emergere in un colloquio SQL entry-level. Considero queste domande essenziali per tutti coloro che aspirano a un lavoro come sviluppatore SQL. Naturalmente, questo non significa che non dobbiate conoscere altro che queste otto domande e risposte. Questo dovrebbe servire solo come linea guida, quindi sentitevi liberi di approfondire questi argomenti. Ci sono anche molte altre domande che potrebbero sorgere, ma queste otto dovrebbero darvi un'idea di ciò che potete aspettarvi. Se non siete sicuri di aver compreso i concetti sopra esposti, fate un po' di pratica seguendo qualche corso. La piattaforma LearnSQL.it offre corsi pratici sulle basi dell'SQL (in generale) e sull'unione di tabelle.

Questo articolo vi è stato utile? Vi ha incoraggiato ad accettare il lavoro che avete visto pubblicizzato qualche giorno fa? Fatemi sapere com'è andata e se vi hanno fatto alcune di queste domande. O forse avete già sostenuto diversi colloqui di lavoro? Cosa vi è stato chiesto? Avete trovato alcune delle risposte di cui sopra insufficienti o troppo dettagliate? Fatemi sapere nella sezione commenti! Sarei lieto di conoscere la vostra esperienza.