Esercizi Subquery SQL
Codegrind Team•Jul 22 2023
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
);