Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Dipendenti, mansioni

Precedente
SUPERIORE
Successiva
Tratto da: AA. VV. SQL, il linguaggio per le basi di dati - HOEPLI

Schema relazionale

DIPENDENTI(IDdipendente, cognome, nome, mansione, stipendio)
MANSIONI(IDmansione, nome, tariffa_oraria)

DIPENDENTI.mansione  chiave esterna collegata a 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 *
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*"));

Dipendenti, mansioni - ApPuNtIdIuNiNfOrMaTiCo

Home • ECDL • Algoritmi • Java • Basi di dati • Seconda prova • Eccetera • Cerca nel sito

Precedente
SUPERIORE
Successiva