Schema relazionale
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 PAGAMENTO.proprietarioID = PROPRIETARIO.IDproprietario) 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