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 NomeFROM StudenteWHERE 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 NomeFROM ProdottoWHERE 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 NomeFROM AutoreWHERE 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 NomeFROM DipartimentoWHERE 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 NomeFROM ProdottoWHERE 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 NomeFROM StudenteWHERE 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 NomeFROM ImpiegatoWHERE 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 NomeFROM ClienteWHERE 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 NomeFROM AttoreWHERE 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 NomeFROM DipendenteWHERE DataAssunzione < ( SELECT DataAssunzione FROM Dipendente WHERE ID = 5);