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

Domande di intervista su SQL per tester di software

L'SQL è un'abilità cruciale per i collaudatori di software. Altrimenti, come farebbero a ottenere i dati da testare? Gli intervistatori per queste mansioni potrebbero farvi diverse domande sul testing del software SQL. Quindi, se vi state preparando per un colloquio di lavoro, dovrete sapere come rispondere a queste dieci domande SQL comuni.

Perché le domande dei colloqui di test del software includono l'SQL? I collaudatori di software utilizzano comunemente il linguaggio di interrogazione strutturato nelle loro attività quotidiane. Ad esempio, lo usano per:

  • Convalidare i dati tra applicazioni e database.
  • Trovare gli account utente che soddisfano i criteri da testare.
  • Recuperare i dati di test dai database.
  • Verificare gli errori nei dati salvati nei database.
  • Verificare la logica aziendale implementata nel database.

La parola comune è "database", che è il dominio di SQL, progettato per gestire i dati nei database.

Data la sua importanza nelle attività quotidiane di test del software, SQL è comunemente presente anche nelle domande dei colloqui di test del software. Le domande di solito testano le conoscenze teoriche e pratiche di SQL. Il modo migliore per prepararsi al colloquio è leggere i concetti di SQL utilizzati dai collaudatori di software e risolvere il maggior numero possibile di sfide di codifica che coinvolgono questi argomenti.

Quindi, sì, è fortemente consigliato trovare altri articoli come questo o altri elenchi di domande per colloqui SQL. Inoltre, potreste seguire dei corsi che si concentrano sulle conoscenze necessarie, come il nostro SQL per principianti come il nostro corso. Gli argomenti trattati vanno dal recupero dei dati da un database, alla creazione di report di base, al filtraggio dei dati con WHERE, fino al lavoro con JOINs, GROUP BY, le subquery e le operazioni di set. Se non avete ancora acquisito la padronanza di questi argomenti, gli oltre 100 esercizi di codifica di questo corso vi aiuteranno ad acquisire le competenze necessarie.

In questo articolo mi concentrerò sui concetti di SQL che sono importanti per il testing del software. Se non avete ancora familiarità con l'SQL, vi consiglio di tenere a portata di mano il nostro foglio informativo gratuito SQL per principianti per una rapida consultazione.

1. Qual è la struttura di base di una query SQL?

Risposta: La query SQL di base è un'istruzione SELECT con una clausola FROM, come mostrato di seguito:

SELECT 
  column_1,
  column_2,
  …
FROM table_name;

Una query SQL non può funzionare senza queste due clausole:

  • SELECT - Elenca le colonne da prelevare dalla tabella.
  • FROM - Specifica la tabella da cui saranno prelevate le colonne in SELECT.

Tuttavia, molto spesso una query SQL include altre clausole (opzionali). Una query un po' meno elementare potrebbe assomigliare a questa:

SELECT 
  column_1,
  column_2,
  …,
  aggregated_column
FROM table_name
WHERE column_1 condition
GROUP BY column_1, column_2, …
HAVING aggregated_column condition
ORDER BY column_1 [ASC|DESC];

Ecco la spiegazione di ogni clausola aggiuntiva.

  • WHERE: Controlla i valori delle colonne specificate e restituisce le righe con i valori che soddisfano la condizione. Si usa per filtrare i dati prima di
  • GROUP BY: Organizza i dati in base ai valori delle colonne specificate.
  • HAVING: Controlla i valori delle colonne aggregate specificate e restituisce quelle che soddisfano la condizione. Utilizzato per filtrare i dati dopo
  • ORDINA PER: Ordina l'output in base a colonne specifiche in ordine crescente (dai valori numerici più bassi a quelli più alti; in ordine alfabetico per i valori stringa; dalla data più vecchia a quella più recente) o decrescente (dai valori numerici più alti a quelli più bassi; in ordine alfabetico inverso per i valori stringa; dalla data più recente a quella più vecchia).

2. Come si modificano i dati in un database?

Risposta: I tester a volte modificano i dati di un database per creare una condizione di test specifica. Le domande sulla modifica dei dati sono quindi piuttosto comuni nei colloqui con i tester software.

È possibile inserire dati in un database con l'istruzione INSERT. Si modificano i dati esistenti in un database con l'istruzione UPDATE. Si rimuovono dati da un database con l'istruzione DELETE.

L'istruzione INSERT inserisce una o più nuove righe di dati in una tabella utilizzando questa sintassi:

INSERT INTO table_name (column_1, column_2, column_3, …) 
VALUES (value_1, value_2, value_3, …);

L'istruzione UPDATE modifica i valori esistenti in una colonna di una tabella di database. Ecco la sintassi:

UPDATE table_name
SET column_name = value
WHERE condition;

L'istruzione DELETE cancella una o più righe dalla tabella utilizzando questa sintassi:

DELETE
FROM table_name
WHERE condition; 

Per ulteriori argomenti di domande sui test del software, potreste voler lavorare su alcune di queste 22 pratiche di comandi SQL prima del colloquio.

3. Trovare gli account utente che soddisfano alcuni criteri

Descrizione del problema: Immaginate di lavorare con la tabella app_users tabella riportata di seguito e di volerla testare utilizzando alcuni dei suoi dati. Questi dati devono includere solo:

  • Utenti attivi che
  • Si sono registrati nel 2024 e
  • hanno più di 100 dollari nel loro conto.

Come si potrebbe scrivere la query per trovare questi utenti? Per prima cosa, analizziamo un campione di dati:

idusernameemailregistration_dateuser_typestatusaccount_balance
1mjohnsonmjohnson@gmail.com2024-02-08adminactive25.00
2sstevenssstevens@gmail.com2023-05-08regular_useractive528.49
3bkingbking@gmail.com2023-09-12regular_userinactive0.00
4adedicadedic@gmail.com2024-07-04adminactive184.22
5blavetteblavette@gmail.com2024-11-03regular_useractive208.50

Soluzione: Per risolvere il problema che vi è stato sottoposto, dovete scrivere la seguente query con tre condizioni all'indirizzo WHERE:

SELECT 
  id,
  username,
  email,
  registration_date,
  user_type,
  status,
  account_balance
FROM app_users
WHERE status = 'Active'
  AND registration_date > '2023-12-31'
  AND account_balance > 100;

Questa query seleziona tutte le colonne dalla tabella app_users. Poi utilizza WHERE e tre condizioni di filtraggio con gli operatori logici e di confronto.

La prima condizione è che lo stato sia attivo, quindi i valori della colonna status devono essere uguali (=; l'operatore di confronto) al valore 'active'. Nota: questo filtra i dati di testo, quindi il valore deve essere scritto tra virgolette singole (').

La seconda condizione di filtraggio è che la data di registrazione deve essere successiva a (l'operatore di confronto > ) 2023-12-31, cioè l'utente si è registrato nel 2024. Nota: questo filtra le date, che devono essere scritte tra virgolette singole.

Infine, la terza condizione verifica che il saldo del conto dell'utente sia superiore a 100. Anche in questo caso, si utilizza l'operatore maggiore di. Anche in questo caso, si utilizza l'operatore di confronto maggiore di (>). In questo caso, il valore è scritto senza virgolette singole perché si tratta di un valore numerico.

Tutte e tre le condizioni devono essere soddisfatte contemporaneamente, quindi le "concateniamo" in WHERE utilizzando due operatori logici AND.

Si tratta di una domanda comune nei colloqui, quindi vi consiglio di esercitarvi su questo argomento utilizzando questi 20 esercizi pratici di SQL WHERE per principianti.

Risultato: L'output mostra due utenti che soddisfano tutti e tre i criteri.

idusernameemailregistration_dateuser_typestatusaccount_balance
4adedicadedic@gmail.com2024-07-04adminactive184.22
5blavetteblavette@gmail.com2024-11-03regular_useractive208.50

4. Ordinare i valori di output

Descrizione del problema: L'intervistatore potrebbe chiedervi di ordinare l'output ottenuto nella domanda precedente dalla data di registrazione più recente a quella più vecchia.

Soluzione: Per farlo, è necessaria una clausola ORDER BY alla fine della query.

SELECT id,
       username,
       email,
       registration_date,
       user_type,
       status,
       account_balance
FROM app_users
WHERE status = 'active'
  AND registration_date > '2023-12-31'
  AND account_balance > 100
ORDER BY registration_date DESC;

Per ordinare l'output in base alla data di registrazione, è sufficiente aggiungere una clausola ORDER BY con la colonna registration_date alla fine della query precedente. È necessario ordinare dalle date di registrazione più recenti a quelle più vecchie, cioè in ordine decrescente, quindi non dimenticate di scrivere DESC dopo il nome della colonna.

Risultato: Ecco l'output ordinato:

idusernameemailregistration_dateuser_typestatusaccount_balance
5blavetteblavette@gmail.com2024-11-03regular_useractive208.50
4adedicadedic@gmail.com2024-07-04adminactive184.22

5. Trovare i valori più alti e più bassi

Descrizione del problema: Una domanda molto comune nei colloqui SQL per i tester QA riguarda la ricerca dei valori più alti e più bassi in un set di dati.

In particolare, supponiamo che vi venga chiesto di restituire l'importo più basso e quello più alto di tutti gli account degli utenti, interrogando la stessa tabella di prima. Una volta ottenuti questi valori, è possibile controllare i dati nell'applicazione per vedere se ci sono account con un importo inferiore o superiore.

Soluzione: Per risolvere questo problema, sono necessarie due funzioni aggregate: MIN() e MAX(). La loro sintassi è semplice: basta scrivere il nome della colonna da cui si vuole ottenere il valore minimo/massimo tra le parentesi della funzione.

SELECT 
  MIN(account_balance) AS minimum_account_balance,
  MAX(account_balance) AS maximum_account_balance
FROM app_users;

Per rendere l'output più leggibile, si possono creare degli alias per le colonne aggregate scrivendo la parola chiave AS seguita dall'alias della colonna.

L'output: Ecco l'output:

minimum_account_balancemaximum_account_balance
0528.49

6. Che cos'è una JOIN in SQL e quale SQL JOIN conoscete?

Risposta: JOIN è una clausola utilizzata per combinare due o più tabelle in SQL.

La sintassi è illustrata di seguito:

SELECT 
  table_1.column_1,
  table_2.column_2,
  …
FROM table_1
JOIN table_2
ON table_1.common_column = table_2.common_column;

La prima tabella unita è elencata in FROM, e la seconda in JOIN. Le tabelle sono unite sulla colonna comune e questa condizione di unione è scritta nella clausola ON.

In SQL esistono cinque JOINs:

  • (INNER) JOIN
  • LEFT (OUTER) JOIN
  • RIGHT (OUTER) JOIN
  • FULL (OUTER) JOIN
  • CROSS JOIN

INNER JOIN restituisce solo le righe corrispondenti delle tabelle unite.

LEFT JOIN restituisce tutte le righe della prima tabella (sinistra) e le righe corrispondenti della seconda tabella (destra). I valori non corrispondenti della tabella di destra vengono visualizzati come NULL.

LaRIGHT JOIN è l'immagine speculare di LEFT JOIN. Restituisce tutte le righe della seconda tabella (destra) e le righe corrispondenti della prima tabella (sinistra). I valori non corrispondenti della tabella di sinistra vengono visualizzati come NULL.

FULL JOIN è una combinazione di LEFT JOIN e RIGHT JOIN; restituisce tutte le righe da entrambe le tabelle di sinistra e di destra. I valori non corrispondenti di entrambe le tabelle sono indicati come NULL.

LaCROSS JOIN combina ogni riga di una tabella con tutte le righe dell'altra tabella, ottenendo un prodotto cartesiano (cioè ogni possibile combinazione di righe).

Tutto questo è una conoscenza cruciale dell'SQL, che potrete approfondire con queste 10 domande e risposte di SQL JOIN.

7. Uscita di dati corrispondenti da due tabelle

Descrizione del problema: Ancora una volta, vi viene data la tabella app_users tabella. Si dispone anche della session_data che mostra informazioni su ogni sessione dell'applicazione. Di seguito è riportato uno snippet di questa tabella:

idapp_user_idsession_startsession_end
112024-10-30 6:05:282024-10-30 6:25:52
222024-10-30 12:58:492024-10-30 14:07:07
312024-10-31 4:22:122024-10-31 5:12:43
422024-10-31 9:51:122024-10-31 9:58:24
552024-11-03 21:36:392024-11-03 23:18:25

Il vostro compito è quello di elencare gli ID degli utenti, i nomi utente e gli orari di inizio e fine delle sessioni, in modo da poter testare questi dati. Non includere i nomi utente che non hanno avuto alcuna sessione nell'applicazione.

Soluzione: Il problema richiede l'utilizzo di dati provenienti da entrambe le tabelle, quindi è necessario unirle. Tuttavia, quale tipo di join utilizzare? La risposta è INNER JOIN. Perché? Perché restituisce solo le righe corrispondenti, cioè solo gli utenti che possono essere trovati in entrambe le tabelle. Se si trovano in entrambe le tabelle, significa che hanno almeno una sessione registrata nella tabella session_data.

SELECT 
  au.id AS user_id,
  au.username,
  sd.session_start,
  sd.session_end
FROM app_users au
JOIN session_data sd
ON au.id = sd.app_user_id;

La prima tabella unita è referenziata in FROM e le viene assegnato l'alias au (gli alias non sono obbligatori, ma aiutano ad abbreviare il nome della tabella quando si deve fare riferimento ad essa). Per unire la seconda tabella, aggiungere la parola chiave JOIN (o INNER JOIN; in SQL hanno lo stesso significato) e scrivere il nome della tabella.

Le tabelle vengono unite sulla colonna comune. In questo caso, si tratta di id dalla prima tabella e di app_user_id dalla seconda.

Ora è possibile selezionare tutte le colonne necessarie da entrambe le tabelle. Per capire facilmente quale colonna proviene da quale tabella, anteporre al nome della colonna il nome della tabella (o l'alias della tabella) seguito da un punto: table_name.row_name.

Risultato: L'output mostra cinque sessioni per tre utenti:

user_idusernamesession_startsession_end
1mjohnson2024-10-30 6:05:282024-10-30 6:25:52
2sstevens2024-10-30 12:58:492024-10-30 14:07:07
1mjohnson2024-10-31 4:22:122024-10-31 5:12:43
2sstevens2024-10-31 9:51:122024-10-31 9:58:24
5blavette2024-11-03 21:36:392024-11-03 23:18:25

8. Categorie con titoli superiori a 100

Descrizione del problema: Vi viene fornita la tabella products per risolvere questa domanda di test del software. Ecco un'istantanea della tabella:

idproduct_nameproduct_categorystock_quantity
1Wireless earbudsElectronics518
2Vacuum cleanerAppliances208
3TreadmillSports12
4USB-C cableElectronics121
5DishwasherAppliances80
6Exercise bikeSports17
7Wireless boomboxElectronics94
8Washing machineAppliances103
9Yoga matSports54

Si vogliono produrre le categorie di prodotti e la loro quantità totale di scorte, ma solo per le categorie con scorte totali superiori a 100. Questo vi servirà per verificare se i dati sono stati registrati correttamente nell'applicazione di inventario.

Soluzione: La soluzione utilizza la funzione aggregata SUM() per sommare la quantità totale delle scorte. Per ottenere questo calcolo per categoria di prodotto, selezionare la colonna product_category e raggruppare l'output in base alla stessa colonna in GROUP BY.

Per mostrare le categorie con scorte totali superiori a 100, il filtraggio deve essere effettuato dopo l'aggregazione. Per questo motivo, è necessario utilizzare HAVING per il filtraggio. (Ricordare che WHERE serve solo per filtrare prima dell'aggregazione). In HAVING, si scriverà nuovamente la colonna aggregata che calcola la quantità totale di scorte, con la condizione che solo i valori superiori a 100 siano inclusi nell'output.

Output: Ci sono due categorie di prodotti che soddisfano la condizione di HAVING:

product_categorytotal_stock_quantity
Appliances391
Electronics733

9. Che cos'è una chiave primaria in un database?

Risposta: Una chiave primaria è un vincolo creato sulla colonna che identifica in modo univoco ogni riga della tabella, non accettando valori duplicati e NULLs.

Ha diversi scopi importanti:

  • Garantire che non vi siano dati duplicati o mancanti in quella colonna.
  • Fornire un modo per identificare in modo univoco ogni riga della tabella.
  • Stabilire una relazione con un'altra tabella tramite una chiave esterna.
  • Garantire l'accessibilità a livello di riga dei dati di una tabella.

Per saperne di più sulle chiavi, consultare l'articolo Perché usare le chiavi primarie e le chiavi esterne nei database.

10. Con quali motori di database lavorate?

Descrizione del problema: È possibile che vi venga chiesto con quali motori di database avete lavorato. Questa domanda, alquanto strana e semplice, ha il potenziale di sorprendervi se non ci avete mai pensato.

Risposta: Non tutti i motori di database SQL sono uguali. È importante quale/i motore/i di database avete utilizzato, soprattutto se si tratta di motori che userete in un futuro lavoro. Assicuratevi di conoscere i motori di database più diffusi. Questo è importante non solo per le differenze tecniche tra gli strumenti, ma anche per le differenze nei dialetti SQL utilizzati da questi motori.

Soprattutto, sappiate quali di questi motori avete utilizzato nei vostri progetti o ruoli precedenti. L'intervistatore potrebbe essere interessato a sapere con quali motori di database avete familiarità.

Pronti a superare queste domande sul test del software SQL?

Queste dieci domande di colloquio vi hanno dato una buona idea di come sono le domande SQL per i collaudatori di software. Aspettatevi un mix di domande teoriche e compiti pratici in SQL.

Gli argomenti trattati sono conoscenze di base di SQL. Se volete ottenere buoni risultati al colloquio su SQL, assicuratevi di essere a vostro agio con tutto ciò che ho menzionato nell'articolo. Per consolidare le vostre conoscenze di base di SQL, vi consiglio di provare i nostri SQL per principianti e Modificare i dati in SQL - istruzioni INSERT, UPDATE e DELETE e di rivedere tutto ciò che è contenuto nella tracciaPratica su SQL .