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

Condominio 2

Precedente
SUPERIORE
Successiva

Schema relazionale esteso

Query

Tutto sui proprietari (per nome...)

SELECT *
FROM PROPRIETARIO
ORDER BY Nome;

Tutto sui proprietari (compreso l'ammontare dei pagamenti effettuati)

SELECT PROPRIETARIO.*,
  (SELECT SUM(Importo)
   FROM PAGAMENTO
   WHERE PROPRIETARIO.IDproprietario = PAGAMENTO.proprietarioID)
FROM PROPRIETARIO
ORDER BY Nome;

Quanto ha pagato ciascun proprietario?

SELECT IDproprietario, Nome, SUM(Importo)
FROM PROPRIETARIO INNER JOIN PAGAMENTO ON PROPRIETARIO.IDproprietario = PAGAMENTO.proprietarioID
GROUP BY IDproprietario, Nome

Tutti i pagamenti, in qualche ordine, di un certo proprietario (dato l'ID)

SELECT *
FROM PAGAMENTO
WHERE proprietarioID=[ID del proprietario?]
ORDER BY Data;

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;

Quanti vani possiede un certo proprietario (dato l'ID)

SELECT SUM([Numero vani]) AS [TOTALE VANI]
FROM APPARTAMENTO
WHERE proprietarioID = [ID del proprietario?];

Quanti vani possiede un certo proprietario (dato il Nome)

...

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?];

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;

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?];

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?]);

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#);

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;

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;

I dieci proprietari che hanno speso di meno

...

I dieci proprietari che hanno pagato di meno

...

Gli appartamenti sfitti

SELECT *
FROM APPARTAMENTO
WHERE (Inquilino IS NULL);

Gli appartamenti affittati

SELECT *
FROM APPARTAMENTO
WHERE (Inquilino IS NOT NULL);

oppure

SELECT *
FROM APPARTAMENTO
WHERE NOT(Inquilino IS NULL);

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");

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");

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;

I proprietari che non hanno effettuato pagamenti

...

Condominio 2 - ApPuNtIdIuNiNfOrMaTiCo

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

Precedente
SUPERIORE
Successiva