Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
• Valore massimo per gli importi dei movimenti di un’anagrafica di nome noto
SELECT MAX(Importo) AS ImportoMassimo
FROM Movimenti INNER JOIN Anagrafiche ON Codice = KCodice
WHERE Nome = “NomeAssegnato”;
1
Anagrafiche (KCodice, Nome, Indirizzo)
Movimenti (KNumero, Descrizione, Data, Importo, Codice)
• Elenco dei movimenti con importo superiore a 300 in ordine crescente di importo
SELECT *
FROM Movimenti
WHERE Importo > 300
ORDER BY Importo;
• Nome delle anagrafiche relative a movimenti con importo compreso tra 3000 e 6000
SELECT Nome
FROM Movimenti INNER JOIN Anagrafiche ON Codice = KCodice
WHERE Importo BETWEEN 3000 AND 6000;
• Importo medio dei movimenti per le anagrafiche aventi più di 20 movimenti registrati
SELECT Codice AS CodiceAnagrafica,
AVG(Importo) AS MediaMovimenti
FROM Movimenti
GROUP BY Codice
HAVING COUNT(*) > 20;
2
Anagrafiche (KCodice, Nome, Indirizzo)
Movimenti (KNumero, Descrizione, Data, Importo, Codice)
• Nome delle anagrafiche che hanno almeno 30 movimenti registrati nella tabella dei
movimenti
SELECT Nome
FROM Anagrafiche INNER JOIN Movimenti ON KCodice = Codice
GROUP BY KCodice, Nome
HAVING COUNT(*) > 30;
3
Anagrafiche (KCodice, Nome, Indirizzo)
Movimenti (KNumero, Descrizione, Data, Importo, Codice)
• Per ogni soggetto di anagrafica elencare codice, nome, numero dei movimenti e somma
degli importi, ordinando l’elenco per valore decrescente del numero di movimenti
SELECT KCodice, Nome,
COUNT(*) AS NumeroMovimenti,
SUM(Importo) AS SommaImporti
FROM Anagrafiche INNER JOIN Movimenti ON KCodice = Codice
GROUP BY KCodice, Nome
ORDER BY COUNT(*) DESC;
• Elencare i soggetti di anagrafica con importo medio dei movimenti superiore a 500
SELECT Nome
FROM Anagrafiche INNER JOIN Movimenti ON KCodice = Codice
GROUP BY KCodice, Nome
HAVING AVG(Importo) > 500;
• Elenco dei soggetti di anagrafica di Milano con somma degli importi superiore a 4500
SELECT Nome
FROM Anagrafiche INNER JOIN Movimenti ON KCodice = Codice
WHERE Indirizzo = ‘Milano’
GROUP BY KCodice, Nome
HAVING SUM(Importo) > 4500;
• Elenco dei soggetti di anagrafica di Milano che hanno valore medio degli importi superiore
a 600. Elenco con codice, nome e numero di movimenti
SELECT KCodice, Nome,
COUNT(*) AS NumeroMovimenti
FROM Anagrafiche INNER JOIN Movimenti ON KCodice = Codice
WHERE Indirizzo = ‘Milano’
GROUP BY KCodice, Nome
HAVING AVG(Importo) > 600;
4
Esercizi delle diapositive 23 e 24 nella presentazione LinguaggioSQL2
• Titolo, Periodicità e Prezzo delle riviste ordinato per valori decrescenti di Prezzo
SELECT Titolo, Periodicità, Prezzo
FROM Riviste
ORDER BY Prezzo DESC;
• Numero degli abbonamenti sottoscritti per una rivista di cui si conosce il Titolo
SELECT COUNT(*) AS NumeroAbbonamenti
FROM Riviste R INNER JOIN Abbonamenti A ON R.CodRiv = A.CodRiv
WHERE Titolo = ‘TitoloDellaRivista’;
5
Riviste ( CodRiv, Titolo, Periodicità, Prezzo )
Abbonati ( CodAbb, Cognome, Indirizzo, Città )
Abbonamenti ( ID, Data, CodRiv, CodAbb )
• Elenco degli abbonamenti sottoscritti nel primo trimestre del 2012 con: titolo rivista, codice
abbonato e data, ordinato per data crescente
SELECT Titolo, CodAbb, Data
FROM Riviste R INNER JOIN Abbonamenti A ON R.CodRiv = A.CodRiv
WHERE Data BETWEEN #01-01-2012# AND #31-03-2012#
ORDER BY DATA;
• Elenco delle riviste per le quali non è precisata la periodicità ordinato per Titolo
SELECT CodRiv, Titolo, Prezzo
FROM Riviste
WHERE Periodicità IS NULL
ORDER BY Titolo;
• Numero di abbonamenti sottoscritti nel 2013 a una rivista di cui si conosce il codice
SELECT COUNT(*) AS Abbonamenti2013
FROM Abbonamenti
WHERE CodRiv = ‘CodiceNoto’ AND YEAR(Data) = 2013;
• Numero degli abbonamenti sottoscritti per ogni rivista (con codice rivista)
SELECT CodRiv, COUNT(*) AS NumeroAbbonamenti
FROM Abbonamenti
GROUP BY CodRiv;
6
Riviste ( CodRiv, Titolo, Periodicità, Prezzo )
Abbonati ( CodAbb, Cognome, Indirizzo, Città )
Abbonamenti ( ID, Data, CodRiv, CodAbb )
• Numero degli abbonamenti sottoscritti per ogni rivista (con codice e titolo rivista)
SELECT CodRiv, Titolo, COUNT(*) AS NumeroAbbonamenti
FROM Abbonamenti A INNER JOIN Riviste R ON A.CodRiv = R.CodRiv
GROUP BY R.CodRiv, Titolo;
• Valore totale abbonamenti per ogni rivista per le sole riviste per le quali sono stati
sottoscritti più di 3000 abbonamenti
SELECT R.CodRiv, SUM(Prezzo) AS ValoreAbbonamenti
FROM Abbonamenti A INNER JOIN Riviste R ON A.CodRiv = R.CodRiv
GROUP BY R.CodRiv
HAVING COUNT(*) > 3000;
• Elenco delle riviste con: titolo, numero degli abbonamenti sottoscritti e valore complessivo
degli abbonamenti, ordinato per numero decrescente di abbonamenti
SELECT Titolo,
COUNT(*) AS NumeroAbbonamenti,
SUM(Prezzo) AS ValoreAbbonamenti
FROM Abbonamenti A INNER JOIN Riviste R ON A.CodRiv = R.CodRiv
GROUP BY R.CodRiv, Titolo
ORDER BY COUNT(*) DESC;
• Suddividere le riviste per periodicità e per ogni periodicità precisare il numero riviste e il
prezzo medio delle riviste che hanno quella periodicità
SELECT Periodicità,
COUNT(*) AS NumeroRiviste,
AVG(Prezzo) AS PrezzoMedio
FROM Riviste
GROUP BY Periodicità;
7
Esercizi della diapositiva 51 nella presentazione LinguaggioSQL2
• Quali sono le riviste mensili di prezzo inferiore al prezzo medio di tali riviste?
SELECT Titolo, Prezzo
FROM Riviste
WHERE Periodicità = ‘Mensile’
AND Prezzo < ( SELECT AVG(Prezzo)
FROM Riviste
WHERE Periodicità = ‘Mensile’ );
8
Riviste ( CodRiv, Titolo, Periodicità, Prezzo )
Abbonati ( CodAbb, Cognome, Indirizzo, Città )
Abbonamenti ( ID, Data, CodRiv, CodAbb )
9
Riviste ( CodRiv, Titolo, Periodicità, Prezzo )
Abbonati ( CodAbb, Cognome, Indirizzo, Città )
Abbonamenti ( ID, Data, CodRiv, CodAbb )
• Da chi è stato sottoscritto l’ultimo abbonamento a una rivista di cui si conosce il codice?
Per semplicità l’abbonato è identificato il solo codice CodAbb.
SELECT TOP 1 CodAbb, ID
FROM Abbonamenti
WHERE CodRiv = ‘CodiceNoto’ AND
Data = ( SELECT MAX(Data)
FROM Abbonamenti
WHERE Data = ‘CodiceNoto’ )
ORDER BY ID DESC;
10