Schema relazionale
- DIPENDENTI(IDdipendente, cognome, nome, stipendio, mansione)
- MANSIONI(IDmansione, nome, tariffa_oraria)
DIPENDENTI.mansione è chiave esterna collegata MANSIONI.IDmansione
Query
- Stipendio medio
SELECT AVG(stipendio) AS [Stipendio medio] FROM DIPENDENTI
- Stipendio medio per mansione
SELECT MANSIONI.IDmansione, MANSIONI.nome, AVG(stipendio) AS [Stipendio medio] FROM MANSIONI INNER JOIN DIPENDENTI ON MANSIONI.IDmansione = DIPENDENTI.mansione GROUP BY MANSIONI.IDmansione, MANSIONI.nome
- Stipendio medio per mansione, che supera la media di tutti i dipendenti
SELECT MANSIONI.IDmansione, MANSIONI.nome, AVG(stipendio) AS [Stipendio medio] FROM MANSIONI INNER JOIN DIPENDENTI ON MANSIONI.IDmansione = DIPENDENTI.mansione GROUP BY MANSIONI.IDmansione, MANSIONI.nome HAVING AVG(stipendio) > (SELECT AVG(stipendio) FROM DIPENDENTI)
- I dipendenti con stipendio superiore al “top manager” dell’azienda
SELECT * FROM DIPENDENTI WHERE stipendio > (SELECT stipendio FROM DIPENDENTI INNER JOIN MANSIONI ON DIPENDENTI.mansione = MANSIONI.IDmansione WHERE MANSIONI.nome = "top manager")
- oppure
SELECT D1.* FROM DIPENDENTI AS D1, DIPENDENTI AS D2, MANSIONI WHERE (D1.stipendio > D2.stipendio) AND (D2.mansione = MANSIONI.IDmansione) AND (MANSIONI.nome = "top manager")
- oppure
SELECT D1.* FROM (DIPENDENTI AS D1 INNER JOIN DIPENDENTI AS D2 ON D1.stipendio > D2.stipendio) INNER JOIN MANSIONI ON D2.mansione = MANSIONI.IDmansione WHERE MANSIONI.nome = "top manager"
- Chi ha uno stipendio minore di 1500 € e ha la stessa mansione di chi ha uno stipendio maggiore di 1500 €
SELECT * FROM DIPENDENTI WHERE (stipendio <= 1500) AND (mansione = ANY (SELECT mansione FROM DIPENDENTI WHERE stipendio > 1500))
- oppure
SELECT * FROM DIPENDENTI WHERE (stipendio <= 1500) AND (mansione IN (SELECT mansione FROM DIPENDENTI WHERE stipendio > 1500))
- Chi ha uno stipendio superiore a quello di tutti gli autisti
SELECT * FROM DIPENDENTI WHERE stipendio > ALL (SELECT stipendio FROM DIPENDENTI INNER JOIN MANSIONI ON DIPENDENTI.mansione = MANSIONI.IDmansione WHERE MANSIONI.nome = "autista")
- oppure
SELECT * FROM DIPENDENTI WHERE stipendio > (SELECT MAX(stipendio) FROM DIPENDENTI INNER JOIN MANSIONI ON DIPENDENTI.mansione = MANSIONI.IDmansione WHERE MANSIONI.nome = "autista")
- Tutto sui dipendenti con tariffa oraria superiore a quella degli impiegati
SELECT DIPENDENTI.* FROM DIPENDENTI INNER JOIN MANSIONI ON DIPENDENTI.mansione = MANSIONI.IDmansione WHERE tariffa_oraria > ALL (SELECT tariffa_oraria FROM MANSIONI WHERE nome LIKE "impiegato*")
- oppure
SELECT DIPENDENTI.* FROM DIPENDENTI INNER JOIN MANSIONI ON DIPENDENTI.mansione = MANSIONI.IDmansione WHERE tariffa_oraria > (SELECT MAX(tariffa_oraria) FROM MANSIONI WHERE nome LIKE "impiegato*")
- Tutto sui dipendenti con tariffa oraria superiore alla tariffa media degli impiegati
SELECT DIPENDENTI.* FROM DIPENDENTI INNER JOIN MANSIONI ON DIPENDENTI.mansione = MANSIONI.IDmansione WHERE tariffa_oraria > (SELECT AVG(tariffa_oraria) FROM MANSIONI WHERE nome LIKE "impiegato*")
- Tutto sui dipendenti con tariffa oraria superiore a qualche impiegato
SELECT DIPENDENTI.* FROM DIPENDENTI INNER JOIN MANSIONI ON DIPENDENTI.mansione = MANSIONI.IDmansione WHERE tariffa_oraria > ANY (SELECT (tariffa_oraria) FROM MANSIONI WHERE nome LIKE "impiegato*")
- oppure
SELECT DIPENDENTI.* FROM DIPENDENTI INNER JOIN MANSIONI ON DIPENDENTI.mansione = MANSIONI.IDmansione WHERE tariffa_oraria > (SELECT MIN(tariffa_oraria) FROM MANSIONI WHERE nome LIKE "impiegato*")
- I dipendenti con stipendio superiore a quello medio della loro mansione
SELECT * FROM DIPENDENTI AS D1 WHERE stipendio > (SELECT AVG(stipendio) FROM DIPENDENTI AS D2 WHERE D2.mansione = D1.mansione)
- I dipendenti con stipendio tra 1000 € e 2000 € e tariffa oraria superiore a 20 €
SELECT DIPENDENTI.* FROM DIPENDENTI WHERE (stipendio BETWEEN 1000 AND 2000) AND (mansione IN (SELECT IDmansione FROM MANSIONI WHERE tariffa_oraria > 20))
- oppure
SELECT DIPENDENTI.* FROM DIPENDENTI WHERE (stipendio BETWEEN 1000 AND 2000) AND (mansione = ANY (SELECT IDmansione FROM MANSIONI WHERE tariffa_oraria > 20))
- Stipendio medio di chi non svolge la mansione né di manager né di impiegato
SELECT AVG(stipendio) FROM DIPENDENTI WHERE mansione NOT IN (SELECT IDmansione FROM MANSIONI WHERE (nome LIKE "*manager*") OR (nome LIKE "impiegato*"))
- oppure
SELECT AVG(stipendio) FROM DIPENDENTI WHERE mansione <> ALL (SELECT IDmansione FROM MANSIONI WHERE (nome LIKE "*manager*") OR (nome LIKE "impiegato*"))