Impiegati e superiori

Il problema

Schema relazionale

  • IMPIEGATI(IDimpiegato, cognome, nome, stipendio, superioreID)

IMPIEGATI.superioreID è chiave esterna collegata a IMPIEGATI.IDimpiegato

Query

  1. Stipendio più basso, medio, più alto e numero di stipendiati
    SELECT Min(stipendio)   AS [stipendio minimo],
           Avg(stipendio)   AS [stipendio medio],
           Max(stipendio)   AS [stipendio massimo],
           Count(stipendio) AS [numero stipendiati]
    FROM   IMPIEGATI
  2. I dati degli impiegati con il cognome del loro superiore
    SELECT I1.cognome, I1.nome,
           I2.cognome AS [superiore]
    FROM   IMPIEGATI AS I1, IMPIEGATI AS I2
    WHERE  I1.superioreID = I2.IDimpiegato
  3. con INNER JOIN…
    SELECT I1.cognome, I1.nome,
           I2.cognome AS [superiore]
    FROM   IMPIEGATI AS I1 INNER JOIN IMPIEGATI AS I2 ON I1.superioreID = I2.IDimpiegato
  4. I dati degli impiegati con lo stipendio più alto del loro superiore
    SELECT I1.cognome, I1.nome, I1.stipendio,
           I2.cognome AS [superiore], I2.stipendio
    FROM   IMPIEGATI AS I1 INNER JOIN IMPIEGATI AS I2 ON I1.superioreID = I2.IDimpiegato
    WHERE  I1.stipendio > I2.stipendio
  5. … quanti sono
    SELECT Count(*) AS [Quanti ...]
    FROM   IMPIEGATI AS I1 INNER JOIN IMPIEGATI AS I2
    WHERE  I1.stipendio > I2.stipendio
  6. Il valore minimo e massimo degli stipendi delle coppie impiegato-superiore
    SELECT Min(I1.stipendio+I2.stipendio) AS [coppia povera],
           Max(I1.stipendio+I2.stipendio) AS [coppia ricca]
    FROM   IMPIEGATI AS I1 INNER JOIN IMPIEGATI AS I2 ON I1.superioreID = I2.IDimpiegato
  7. La differenza più alta tra lo stipendio di un superiore e di un impiegato
    SELECT Max(I2.stipendio-I1.stipendio) AS [differenza massima]
    FROM   IMPIEGATI AS I1 INNER JOIN IMPIEGATI AS I2 ON I1.superioreID = I2.IDimpiegato
  8. Il totale degli stipendi dei superiori
    SELECT Sum(I2.stipendio) AS [totale stipendi dei superiori]
    FROM   IMPIEGATI AS I1 INNER JOIN IMPIEGATI AS I2 ON (I1.superioreID=I2.IDimpiegato)
  9. Il totale degli stipendi dei dipendenti per ogni superiore
    SELECT   I2.Cognome, Sum(I1.stipendio) AS [stipendi dei dipendenti]
    FROM     IMPIEGATI AS I1 INNER JOIN IMPIEGATI AS I2 ON I1.superioreID = I2.IDimpiegato
    GROUP BY I2.Cognome
  10. Il totale degli stipendi dei dipendenti per ogni superiore (se è almeno 100000)
    SELECT   I2.Cognome, Sum(I1.stipendio) AS [stipendi dei dipendenti]
    FROM     IMPIEGATI AS I1 INNER JOIN IMPIEGATI AS I2 ON I1.superioreID = I2.IDimpiegato
    GROUP BY I2.Cognome
    HAVING   Sum(I1.stipendio) >= 100000