Condominio

Il problema

Schema relazionale

Rel_condominio

Query

  1. Tutto sui proprietari (per nome…)
    SELECT   *
    FROM     PROPRIETARIO
    ORDER BY Nome
  2. Tutto sui proprietari (compreso l’ammontare dei pagamenti effettuati)
    SELECT   PROPRIETARIO.*, (SELECT SUM(Importo)
                              FROM PAGAMENTO
                              WHERE PAGAMENTO.proprietarioID = PROPRIETARIO.IDproprietario)
    FROM     PROPRIETARIO
    ORDER BY Nome
  3. Quanto ha pagato ciascun proprietario?
    SELECT   IDproprietario, Nome, SUM(Importo)
    FROM     PROPRIETARIO INNER JOIN PAGAMENTO ON PROPRIETARIO.IDproprietario = PAGAMENTO.proprietarioID
    GROUP BY IDproprietario, Nome
  4. Tutti i pagamenti, in qualche ordine, di un certo proprietario (dato l’ID)
    SELECT   *
    FROM     PAGAMENTO
    WHERE    proprietarioID=[ID del proprietario?]
    ORDER BY DATA
  5. Tutti i pagamenti, in qualche ordine, di un certo proprietario (dato il Nome)
    SELECT   PAGAMENTI.*
    FROM     PROPRIETARIO INNER JOIN PAGAMENTO ON PROPRIETARIO.IDproprietario = PAGAMENTO.proprietarioID
    WHERE    Nome LIKE [Nome del proprietario?]
    ORDER BY DATA
  6. Quanti vani possiede un certo proprietario (dato l’ID)
    SELECT Sum([Numero vani]) AS [TOTALE VANI]
    FROM   APPARTAMENTO
    WHERE  proprietarioID = [ID del proprietario?]
  7. Quanti vani possiede un certo proprietario (dato il Nome)
  8. Tutto sugli appartamenti (e relativo proprietario…) con almeno X vani
    SELECT *
    FROM   APPARTAMENTO INNER JOIN PROPRIETARIO ON APPARTAMENTO.proprietarioID = PROPRIETARIO.IDproprietario
    WHERE  [Numero vani] >= [Quanti vani?]
  9. L’importo di pagamento minimo, medio, massimo
    SELECT Min(Importo) AS [IMPORTO MINIMO],Avg(Importo) AS [IMPORTO MEDIO],Max(Importo) AS [IMPORTO MASSIMO]
    FROM   PAGAMENTO
  10. La spesa minima, media, massima, totale per un certo appartamento
    SELECT Min(Importo) AS [SPESA MINIMA],  Avg(Importo) AS [SPESA MEDIA],
           Max(Importo) AS [SPESA MASSIMA], Sum(Importo) AS [SPESA TOTALE]
    FROM   SPESA
    WHERE  appartamentoID = [Codice appartamento?]
  11. Quanto è stato speso per la voce ascensore da una certa data
    SELECT Sum(Importo) AS [Spesa per ascensore dal ...]
    FROM   SPESA INNER JOIN VOCE ON SPESA.voceID = VOCE.IDvoce
    WHERE  (VOCE LIKE "ascensore") AND
           (DATA >= [Da quale DATA?])
  12. Quanto è stato speso per la voce ascensore nel corso del 2005
    SELECT Sum(Importo) AS [Spesa per ascensore nel 2005]
    FROM   SPESA INNER JOIN VOCE ON SPESA.voceID = VOCE.IDvoce
    WHERE  (VOCE LIKE "ascensore") AND
           (DATA BETWEEN #01/01/2005# AND #31/12/2005#)
  13. I dieci proprietari che hanno più appartamenti
    SELECT   TOP 10 IDproprietario, Nome, Count(*)
    FROM     PROPRIETARIO INNER JOIN APPARTAMENTO ON PROPRIETARIO.IDproprietario = APPARTAMENTO.proprietarioID
    GROUP BY IDproprietario, Nome
    ORDER BY Count(*) DESC
  14. I dieci proprietari che hanno speso di più
    SELECT   TOP 10 IDproprietario, Nome, Sum(Importo)
    FROM     (PROPRIETARIO INNER JOIN APPARTAMENTO ON PROPRIETARIO.IDproprietario = APPARTAMENTO.proprietarioID)
              INNER JOIN SPESA ON APPARTAMENTO.IDappartamento = SPESA.appartamentoID
    GROUP BY IDproprietario, Nome
    ORDER BY Sum(Importo) DESC
  15. I dieci proprietari che hanno speso di meno
  16. I dieci proprietari che hanno pagato di meno
  17. Gli appartamenti sfitti
    SELECT *
    FROM   APPARTAMENTO
    WHERE  Inquilino IS NULL
  18. Gli appartamenti affittati
    SELECT *
    FROM   APPARTAMENTO
    WHERE  Inquilino IS NOT NULL

    oppure

    SELECT *
    FROM   APPARTAMENTO
    WHERE  NOT(Inquilino IS NULL)
  19. Gli appartamenti dei proprietari Bianchi, Rossi e Verdi
    SELECT APPARTAMENTO.*, PROPRIETARIO.nome
    FROM   APPARTAMENTO INNER JOIN PROPRIETARIO ON APPARTAMENTO.proprietarioID = PROPRIETARIO.IDproprietario
    WHERE  Nome IN ("Bianchi", "Rossi", "Verdi")
  20. Gli appartamenti che non sono di proprietà di Bianchi, Rossi e Verdi
    SELECT APPARTAMENTO.*, PROPRIETARIO.nome
    FROM   APPARTAMENTO INNER JOIN PROPRIETARIO ON APPARTAMENTO.proprietarioID = PROPRIETARIO.IDproprietario
    WHERE  Nome NOT IN ("Bianchi", "Rossi", "Verdi")
  21. I proprietari che hanno effettuato almeno un pagamento
    SELECT *
    FROM   PROPRIETARIO
    WHERE  IDproprietario IN (SELECT proprietarioID
                              FROM   PAGAMENTO)

    oppure

    SELECT DISTINCT PROPRIETARIO.*
    FROM   PROPRIETARIO INNER JOIN PAGAMENTO ON PROPRIETARIO.IDproprietario = PAGAMENTO.proprietarioID

    oppure

    SELECT *
    FROM   PROPRIETARIO
    WHERE  EXISTS (SELECT *
                   FROM PAGAMENTO
                   WHERE PAGAMENTO.proprietarioID = PROPRIETARIO.IDproprietario)

    oppure

    SELECT *
    FROM   PROPRIETARIO
    WHERE  (SELECT Count(*)
            FROM PAGAMENTO
            WHERE PAGAMENTO.proprietarioID=PROPRIETARIO.IDproprietario) > 0
  22. I proprietari che non hanno effettuato pagamenti