Skip to content

Esercizi Subquery SQL

Ecco degli esercizi semplici con soluzione per praticare le basi sull’utilizzo delle subquery in sql.

Esercizio 1

Ottieni il nome degli studenti che sono iscritti a corsi con una durata superiore alla media di tutte le durate dei corsi.
SELECT Nome
FROM Studente
WHERE ID IN (
SELECT ID_Studente
FROM Iscrizione
WHERE ID_Corso IN (
SELECT ID
FROM Corso
WHERE Durata > (
SELECT AVG(Durata)
FROM Corso
)
)
);

Esercizio 2

Ottieni il nome dei prodotti che sono forniti da tutti i fornitori.
SELECT Nome
FROM Prodotto
WHERE ID_Fornitore IN (
SELECT ID
FROM Fornitore
WHERE ID_Dipartimento IN (
SELECT ID
FROM Dipartimento
WHERE (SELECT COUNT(DISTINCT ID_Fornitore) FROM Prodotto) = (
SELECT COUNT(*)
FROM Fornitore
WHERE ID_Dipartimento = Dipartimento.ID
)
)
);

Esercizio 3

Ottieni il nome degli autori che hanno scritto libri appartenenti a un determinato genere.
SELECT Nome
FROM Autore
WHERE ID IN (
SELECT ID_Autore
FROM Libro
WHERE ID_Genere = (
SELECT ID
FROM Genere
WHERE Nome = 'Romanzo'
)
);

Esercizio 4

Ottieni il nome dei dipartimenti che hanno almeno un dipendente con un salario superiore alla media dei salari di tutti i dipendenti.
SELECT Nome
FROM Dipartimento
WHERE ID IN (
SELECT ID_Dipartimento
FROM Dipendente
WHERE Salario > (
SELECT AVG(Salario)
FROM Dipendente
)
);

Esercizio 5

Ottieni il nome dei prodotti che sono stati acquistati da clienti con un indirizzo email che termina con "@gmail.com".
SELECT Nome
FROM Prodotto
WHERE ID IN (
SELECT ID_Prodotto
FROM DettaglioOrdine
WHERE ID_Ordine IN (
SELECT ID
FROM Ordine
WHERE ID_Cliente IN (
SELECT ID
FROM Cliente
WHERE Email LIKE '%@gmail.com'
)
)
);

Esercizio 6

Ottieni il nome degli studenti che hanno superato almeno un esame con una votazione superiore a 90.
SELECT Nome
FROM Studente
WHERE ID IN (
SELECT ID_Studente
FROM Esame
WHERE Votazione > 90
);

Esercizio 7

Ottieni il nome degli impiegati che hanno almeno un dipendente sotto la loro supervisione.
SELECT Nome
FROM Impiegato
WHERE ID IN (
SELECT ID_Manager
FROM Dipendente
);

Esercizio 8

Ottieni il nome dei clienti che hanno effettuato un ordine con un importo totale superiore a 1000.
SELECT Nome
FROM Cliente
WHERE ID IN (
SELECT ID_Cliente
FROM Ordine
GROUP BY ID_Cliente
HAVING SUM(Importo) > 1000
);

Esercizio 9

Ottieni il nome degli attori che hanno recitato in tutti i film appartenenti a un determinato genere.
SELECT Nome
FROM Attore
WHERE ID IN (
SELECT ID_Attore
FROM Recitazione
WHERE ID_Film IN (
SELECT ID
FROM Film
WHERE ID_Genere = (
SELECT ID
FROM Genere
WHERE Nome = 'Commedia'
)
)
GROUP BY ID_Attore
HAVING COUNT(DISTINCT ID_Film) = (
SELECT COUNT(ID)
FROM Film
WHERE ID_Genere = (
SELECT ID
FROM Genere
WHERE Nome = 'Commedia'
)
)
);

Esercizio 10

Ottieni il nome dei dipendenti che sono stati assunti prima di un certo dipendente con un determinato ID.
SELECT Nome
FROM Dipendente
WHERE DataAssunzione < (
SELECT DataAssunzione
FROM Dipendente
WHERE ID = 5
);