🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

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
);