|
Tratto da: AA. VV. SQL, il linguaggio per le
basi di dati - HOEPLI
Schema relazionaleDIPENDENTI(IDdipendente, cognome, nome, mansione, stipendio) MANSIONI(IDmansione, nome, tariffa_oraria) DIPENDENTI.mansione è chiave esterna collegata a MANSIONI.IDmansione QueryStipendio 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 * 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 * 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 * 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 * FROM DIPENDENTI INNER JOIN MANSIONI ON DIPENDENTI.mansione=MANSIONI.IDmansione WHERE tariffa_oraria > ANY (SELECT (tariffa_oraria) FROM MANSIONI WHERE nome LIKE "impiegato*"); Tutto sui dipendenti con tariffa oraria superiore a qualche impiegato SELECT * 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*") AND (nome LIKE "impiegato*")); oppure SELECT AVG(stipendio) FROM DIPENDENTI WHERE mansione <> ALL (SELECT IDmansione FROM MANSIONI WHERE (nome LIKE "*manager*") AND (nome LIKE "impiegato*")); |
|