Appunti di Programmazione

Creative Commons License

Pagina 1 2 3 4 5 6 7 8

Le Viste

Le Viste sono Tabelle che permettono la visualizzazione dei dati provenienti da più fonti i cui elementi sono combinati fra loro.

Il mio scopo è quello di creare una classifica di realizzatori sia per la categoria Esordienti che per quella Aquilotti e poi due Registri Presenze per annotare il numero di partite a cui ha partecipato ciascun ragazzo anch'esso suddiviso per categoria.

Registro Presenze

mysql> CREATE VIEW presenze_aquilotti
    -> AS SELECT Partita.Codice_Partita,Campionato.Categoria, Giocatori.* FROM
    -> Giocatori inner join Partita
    -> ON Giocatori.Numero_Maglia=Partita.Numero_Maglia INNER JOIN Campionato
    -> ON Partita.Codice_Partita=Campionato.Codice_Partita
    -> WHERE Campionato.Categoria="Aquilotti"
    -> ORDER BY Giocatori.Numero_Maglia, Partita.Codice_Partita;
Query OK, 0 rows affected (0,12 sec)


mysql> SELECT * FROM presenze_aquilotti;
+----------------+-----------+---------------+-----------+------------+------+
| Codice_Partita | Categoria | Numero_Maglia | Cognome   | Nome       | Anno |
+----------------+-----------+---------------+-----------+------------+------+
|              4 | Aquilotti |             8 | Azzurro   | Alberto    | 2007 |
|              1 | Aquilotti |            11 | Beige     | Andrea     | 2006 |
|              4 | Aquilotti |            11 | Beige     | Andrea     | 2006 |
|              1 | Aquilotti |            13 | Bordeaux  | Riccardo   | 2006 |
|              4 | Aquilotti |            13 | Bordeaux  | Riccardo   | 2006 |
|              1 | Aquilotti |            15 | Carbone   | Lorenzo    | 2006 |
|              4 | Aquilotti |            15 | Carbone   | Lorenzo    | 2006 |
|              1 | Aquilotti |            17 | Arancioni | Romeo      | 2006 |
|              4 | Aquilotti |            17 | Arancioni | Romeo      | 2006 |
|              1 | Aquilotti |            18 | Catrame   | Vittorio   | 2006 |
|              4 | Aquilotti |            18 | Catrame   | Vittorio   | 2006 |
|              1 | Aquilotti |            20 | Rossi     | Alessandro | 2006 |
|              4 | Aquilotti |            20 | Rossi     | Alessandro | 2006 |
|              1 | Aquilotti |            23 | Gialli    | Paolo      | 2006 |
|              1 | Aquilotti |            30 | Neri      | Tommaso    | 2006 |
|              4 | Aquilotti |            30 | Neri      | Tommaso    | 2006 |
|              1 | Aquilotti |            33 | Blu       | Emanuele   | 2007 |
|              4 | Aquilotti |            33 | Blu       | Emanuele   | 2007 |
|              4 | Aquilotti |            36 | Ecru      | Federico   | 2007 |
|              1 | Aquilotti |            37 | Fucsia    | Francesco  | 2007 |
|              4 | Aquilotti |            37 | Fucsia    | Francesco  | 2007 |
|              1 | Aquilotti |            40 | Granata   | Roberto    | 2007 |
|              1 | Aquilotti |            42 | Ambra     | Francesco  | 2007 |
|              4 | Aquilotti |            42 | Ambra     | Francesco  | 2007 |
+----------------+-----------+---------------+-----------+------------+------+
24 rows in set (0,06 sec)
Manuale Online: CREATE VIEW

Viene creata una Vista di nome "presenze_aquilotti", che per convenzione viene scritta totalmente in minuscolo per distinguerla dalle Tabelle, le cui colonne sono selezionate in questo modo:

- "Codice_Partita" - recuperata dalla Tabella Partita.
- "Categoria" - recuperata dalla Tabella Campionato
- Tutte le colonne della Tabella Giocatori.

Le tre Tabelle sono unite/collegate fra loro attraverso la clausola INNER JOIN in questo modo:
- "Giocatori" e "Campionato" attraverso la colonna Numero_Maglia.
- "Partita" e "Campionato" attraverso la colonna Codice_Partita

Sono elencati solo i ragazzi che giocano nella catergoria Aquilotti e la lista è ordinata usando come criterio prima il numero della maglia e poi i codice della partita.

La colonna che funge da tramite deve essere identica in entrambe le Tabelle, e in una delle due deve essere una Chiave Primaria.

Manuale Online: JOIN

La Vista così come è non è molto pratica da leggere, in quanto produce una lista dei bambini che hanno partecipato alle varie partite ripetendo il nome di ciascun ragazzo tante volte quante sono i match che ha disputato.
Per avere un elenco in cui per ogni giocatoe viene visualizzato il numero di presenze, si usa una SELECT con l'opzione COUNT(*) che permette di conteggiare la ripetizione di un valore in una colonna:

mysql> SELECT Numero_Maglia, Cognome, Nome, Anno, COUNT(*) AS Presenze
    -> FROM presenze_aquilotti
    -> WHERE Anno>2005 and Anno<2009
    -> GROUP BY Numero_Maglia HAVING COUNT(*)>=0;
+---------------+-----------+------------+------+----------+
| Numero_Maglia | Cognome   | Nome       | Anno | Presenze |
+---------------+-----------+------------+------+----------+
|             8 | Azzurro   | Alberto    | 2007 |        1 |
|            11 | Beige     | Andrea     | 2006 |        2 |
|            13 | Bordeaux  | Riccardo   | 2006 |        2 |
|            15 | Carbone   | Lorenzo    | 2006 |        2 |
|            17 | Arancioni | Romeo      | 2006 |        2 |
|            18 | Catrame   | Vittorio   | 2006 |        2 |
|            20 | Rossi     | Alessandro | 2006 |        2 |
|            23 | Gialli    | Paolo      | 2006 |        1 |
|            30 | Neri      | Tommaso    | 2006 |        2 |
|            33 | Blu       | Emanuele   | 2007 |        2 |
|            36 | Ecru      | Federico   | 2007 |        1 |
|            37 | Fucsia    | Francesco  | 2007 |        2 |
|            40 | Granata   | Roberto    | 2007 |        1 |
|            42 | Ambra     | Francesco  | 2007 |        2 |
+---------------+-----------+------------+------+----------+
14 rows in set (0,04 sec)

La SELECT visualizza a video le colonne "Numero_Maglia", "Cognome", "Nome", "Anno" e una colonna dei conteggi di nome "Presenze", recuperate dalla Vista "presenze_aquilotti" dove i ragazzi sono nati negli anni 2006, 2007 e 2008 raggruppati per la colonna "Numero_Maglia". La clauola COUNT(*) permette di conteggiare le righe con lo stesso tipo di informazione e di raggrupparle secondo criteri a noi utili.

Manuale Online: COUNT(*)

Similmente si realizzano la Vista e la SELECT per il Registro Presenze degli Erordienti

mysql> CREATE VIEW presenze_esordienti
    -> AS SELECT Partita.Codice_Partita, Campionato.Categoria, Giocatori.* FROM
    -> Giocatori inner join Partita
    -> ON Giocatori.Numero_Maglia=Partita.Numero_Maglia INNER JOIN Campionato
    -> ON Partita.Codice_Partita=Campionato.Codice_Partita
    -> WHERE Campionato.Categoria="Esordienti"
    -> ORDER BY Giocatori.Numero_Maglia, Partita.Codice_Partita;
Query OK, 0 rows affected (0,06 sec)


mysql> SELECT Numero_Maglia, Cognome, Nome, Anno, COUNT(*) AS Presenze
    -> FROM presenze_esordienti
    -> WHERE Anno>2004 and Anno<2007
    -> GROUP BY Numero_Maglia HAVING COUNT(*)>=0;
+---------------+-----------+------------+------+----------+
| Numero_Maglia | Cognome   | Nome       | Anno | Presenze |
+---------------+-----------+------------+------+----------+
|             4 | Celesti   | Nicolò     | 2005 |        1 |
|             7 | Avorio    | Andrea     | 2005 |        1 |
|            10 | Marroni   | Ivan       | 2005 |        1 |
|            11 | Beige     | Andrea     | 2006 |        1 |
|            14 | Antracite | Lorenzo    | 2005 |        2 |
|            15 | Carbone   | Lorenzo    | 2006 |        2 |
|            17 | Arancioni | Romeo      | 2006 |        2 |
|            18 | Catrame   | Vittorio   | 2006 |        2 |
|            19 | Antracite | Ferdinando | 2005 |        2 |
|            20 | Rossi     | Alessandro | 2006 |        2 |
|            21 | Bianchi   | Antonio    | 2005 |        1 |
|            23 | Gialli    | Paolo      | 2006 |        1 |
|            24 | Ciano     | Federico   | 2005 |        2 |
|            25 | Corallo   | Luca       | 2005 |        1 |
|            26 | Cremisi   | Emiliano   | 2005 |        2 |
|            30 | Neri      | Tommaso    | 2006 |        1 |
+---------------+-----------+------------+------+----------+
16 rows in set (0,03 sec)

Classifiche Realizzatori

Per la realizzazione delle due classifiche ho innanzitutto creato una Vista con i canestri realizzati da ciascun giocatore in ogni partita suddivisi per valore; poi da questa ho estratto i giocatori che hanno frequentato il campionato Aquilotti e quello Esordienti.

mysql> CREATE VIEW canestri AS SELECT Partita.Codice_Partita,
    -> Partita.Numero_Maglia,Campionato.Categoria,
    -> Partita.Canestri_2p_1T+Partita.Canestri_2p_2T+
    -> Partita.Canestri_2p_3T+Partita.Canestri_2p_4T+
    -> Partita.Canestri_2p_5T+Partita.Canestri_2p_6T+
    -> Partita.Canestri_2p_7T+Partita.Canestri_2p_8T AS Canestri_2p,
    -> Partita.Canestri_1p_1T+Partita.Canestri_1p_2T+
    -> Partita.Canestri_1p_3T+Partita.Canestri_1p_4T+
    -> Partita.Canestri_1p_5T+Partita.Canestri_1p_6T+
    -> Partita.Canestri_1p_7T+Partita.Canestri_1p_8T AS Canestri_1p
    -> FROM Partita INNER JOIN Campionato
    -> ON Partita.Codice_Partita=Campionato.Codice_Partita;
Query OK, 0 rows affected (0,11 sec)


mysql> SELECT * FROM canestri;
+----------------+---------------+------------+-------------+-------------+
| Codice_Partita | Numero_Maglia | Categoria  | Canestri_2p | Canestri_1p |
+----------------+---------------+------------+-------------+-------------+
|              1 |            11 | Aquilotti  |           1 |           1 |
|              1 |            13 | Aquilotti  |           0 |           0 |
|              1 |            15 | Aquilotti  |           1 |           0 |
|              1 |            17 | Aquilotti  |           1 |           1 |
|              1 |            18 | Aquilotti  |           1 |           1 |
|              1 |            20 | Aquilotti  |           0 |           1 |
|              1 |            23 | Aquilotti  |           1 |           0 |
|              1 |            30 | Aquilotti  |           0 |           0 |
|              1 |            33 | Aquilotti  |           0 |           3 |
|              1 |            37 | Aquilotti  |           2 |           0 |
|              1 |            40 | Aquilotti  |           0 |           0 |
|              1 |            42 | Aquilotti  |           0 |           0 |
|              2 |             4 | Esordienti |           0 |           0 |
|              2 |             7 | Esordienti |           1 |           0 |
|              2 |            11 | Esordienti |           0 |           0 |
|              2 |            14 | Esordienti |           0 |           1 |
|              2 |            15 | Esordienti |           0 |           0 |
|              2 |            17 | Esordienti |           1 |           0 |
|              2 |            18 | Esordienti |           1 |           1 |
|              2 |            19 | Esordienti |           1 |           0 |
|              2 |            20 | Esordienti |           2 |           0 |
|              2 |            21 | Esordienti |           0 |           0 |
|              2 |            24 | Esordienti |           9 |           1 |
|              2 |            26 | Esordienti |           3 |           0 |
|              3 |            10 | Esordienti |           0 |           0 |
|              3 |            14 | Esordienti |           1 |           1 |
|              3 |            15 | Esordienti |           0 |           0 |
|              3 |            17 | Esordienti |           0 |           0 |
|              3 |            18 | Esordienti |           2 |           1 |
|              3 |            19 | Esordienti |           1 |           0 |
|              3 |            20 | Esordienti |           0 |           0 |
|              3 |            23 | Esordienti |           1 |           0 |
|              3 |            24 | Esordienti |           8 |           4 |
|              3 |            25 | Esordienti |           0 |           0 |
|              3 |            26 | Esordienti |           0 |           1 |
|              3 |            30 | Esordienti |           0 |           0 |
|              4 |             8 | Aquilotti  |           0 |           0 |
|              4 |            11 | Aquilotti  |           5 |           0 |
|              4 |            13 | Aquilotti  |           2 |           0 |
|              4 |            15 | Aquilotti  |           6 |           1 |
|              4 |            17 | Aquilotti  |           0 |           1 |
|              4 |            18 | Aquilotti  |           7 |           2 |
|              4 |            20 | Aquilotti  |           5 |           0 |
|              4 |            30 | Aquilotti  |           3 |           0 |
|              4 |            33 | Aquilotti  |           0 |           0 |
|              4 |            36 | Aquilotti  |           0 |           0 |
|              4 |            37 | Aquilotti  |           4 |           2 |
|              4 |            42 | Aquilotti  |           1 |           0 |
+----------------+---------------+------------+-------------+-------------+
48 rows in set (0,07 sec)

Viene creata una Vista selezionando le colonne Codice Partita e Numero Maglia dalla Tabella Partita, la Categoria dalla Tabella Campionato e poi vengono sommati i canestri realizzati in ciascun tempo da ogni singolo bambino raccolti in due variabili Canestri_2p e Canestri_1p di 2 e 1 punto rispettivamente, mettendo in relazione le due Tabelle Partita e Campionato attraverso i campi Codice Partita.
E adesso si scrivono le Viste per estrarre i dati relativi agli Aquilotti e agli Esordienti.

mysql> CREATE VIEW canestri_aquilotti AS SELECT Numero_Maglia,
    -> SUM(Canestri_2p) AS Totale_2p, SUM(Canestri_1p) AS Totale_1p, 
    -> (SUM(Canestri_2p)*2+SUM(Canestri_1p)) AS Punteggio
    -> FROM canestri WHERE Categoria="Aquilotti" GROUP BY Numero_Maglia;
Query OK, 0 rows affected (0,31 sec)


mysql> SELECT * FROM canestri_aquilotti;
+---------------+-----------+-----------+-----------+
| Numero_Maglia | Totale_2p | Totale_1p | Punteggio |
+---------------+-----------+-----------+-----------+
|             8 |         0 |         0 |         0 |
|            11 |         6 |         1 |        13 |
|            13 |         2 |         0 |         4 |
|            15 |         7 |         1 |        15 |
|            17 |         1 |         2 |         4 |
|            18 |         8 |         3 |        19 |
|            20 |         5 |         1 |        11 |
|            23 |         1 |         0 |         2 |
|            30 |         3 |         0 |         6 |
|            33 |         0 |         3 |         3 |
|            36 |         0 |         0 |         0 |
|            37 |         6 |         2 |        14 |
|            40 |         0 |         0 |         0 |
|            42 |         1 |         0 |         2 |
+---------------+-----------+-----------+-----------+
14 rows in set (0,06 sec)


mysql> CREATE VIEW canestri_esordienti AS SELECT Numero_Maglia,
    -> SUM(Canestri_2p) AS Totale_2p, SUM(Canestri_1p) AS Totale_1p,
    -> (SUM(Canestri_2p)*2+SUM(Canestri_1p)) AS Punteggio
    -> FROM canestri WHERE Categoria="Esordienti" GROUP BY Numero_Maglia;
Query OK, 0 rows affected (0,06 sec)


mysql> SELECT * FROM canestri_esordienti;
+---------------+-----------+-----------+-----------+
| Numero_Maglia | Totale_2p | Totale_1p | Punteggio |
+---------------+-----------+-----------+-----------+
|             4 |         0 |         0 |         0 |
|             7 |         1 |         0 |         2 |
|            10 |         0 |         0 |         0 |
|            11 |         0 |         0 |         0 |
|            14 |         1 |         2 |         4 |
|            15 |         0 |         0 |         0 |
|            17 |         1 |         0 |         2 |
|            18 |         3 |         2 |         8 |
|            19 |         2 |         0 |         4 |
|            20 |         2 |         0 |         4 |
|            21 |         0 |         0 |         0 |
|            23 |         1 |         0 |         2 |
|            24 |        17 |         5 |        39 |
|            25 |         0 |         0 |         0 |
|            26 |         3 |         1 |         7 |
|            30 |         0 |         0 |         0 |
+---------------+-----------+-----------+-----------+
16 rows in set (0,01 sec)

E adesso le due SELECT per la visualizzazione delle due Classifice:

mysql> SELECT Giocatori.*, canestri_aquilotti.Totale_2p,
    -> canestri_aquilotti.Totale_1p, canestri_aquilotti.Punteggio
    -> FROM Giocatori INNER JOIN canestri_aquilotti
    -> ON Giocatori.Numero_Maglia = canestri_aquilotti.Numero_Maglia
    -> WHERE Giocatori.Anno<2009 ORDER BY canestri_aquilotti.Punteggio DESC;                                     
+---------------+-----------+------------+------+-----------+-----------+-----------+
| Numero_Maglia | Cognome   | Nome       | Anno | Totale_2p | Totale_1p | Punteggio |
+---------------+-----------+------------+------+-----------+-----------+-----------+
|            18 | Catrame   | Vittorio   | 2006 |         8 |         3 |        19 |
|            15 | Carbone   | Lorenzo    | 2006 |         7 |         1 |        15 |
|            37 | Fucsia    | Francesco  | 2007 |         6 |         2 |        14 |
|            11 | Beige     | Andrea     | 2006 |         6 |         1 |        13 |
|            20 | Rossi     | Alessandro | 2006 |         5 |         1 |        11 |
|            30 | Neri      | Tommaso    | 2006 |         3 |         0 |         6 |
|            17 | Arancioni | Romeo      | 2006 |         1 |         2 |         4 |
|            13 | Bordeaux  | Riccardo   | 2006 |         2 |         0 |         4 |
|            33 | Blu       | Emanuele   | 2007 |         0 |         3 |         3 |
|            42 | Ambra     | Francesco  | 2007 |         1 |         0 |         2 |
|            23 | Gialli    | Paolo      | 2006 |         1 |         0 |         2 |
|             8 | Azzurro   | Alberto    | 2007 |         0 |         0 |         0 |
|            40 | Granata   | Roberto    | 2007 |         0 |         0 |         0 |
|            36 | Ecru      | Federico   | 2007 |         0 |         0 |         0 |
+---------------+-----------+------------+------+-----------+-----------+-----------+
14 rows in set (0,00 sec)


mysql> SELECT Giocatori.*, canestri_esordienti.Totale_2p, 
    -> canestri_esordienti.Totale_1p, canestri_esordienti.Punteggio
    -> FROM Giocatori INNER JOIN canestri_esordienti
    -> ON Giocatori.Numero_Maglia = canestri_esordienti.Numero_Maglia
    -> WHERE Giocatori.Anno>2004 ORDER BY canestri_esordienti.Punteggio DESC;
+---------------+-----------+------------+------+-----------+-----------+-----------+
| Numero_Maglia | Cognome   | Nome       | Anno | Totale_2p | Totale_1p | Punteggio |
+---------------+-----------+------------+------+-----------+-----------+-----------+
|            24 | Ciano     | Federico   | 2005 |        17 |         5 |        39 |
|            18 | Catrame   | Vittorio   | 2006 |         3 |         2 |         8 |
|            26 | Cremisi   | Emiliano   | 2005 |         3 |         1 |         7 |
|            14 | Antracite | Lorenzo    | 2005 |         1 |         2 |         4 |
|            19 | Antracite | Ferdinando | 2005 |         2 |         0 |         4 |
|            20 | Rossi     | Alessandro | 2006 |         2 |         0 |         4 |
|             7 | Avorio    | Andrea     | 2005 |         1 |         0 |         2 |
|            17 | Arancioni | Romeo      | 2006 |         1 |         0 |         2 |
|            23 | Gialli    | Paolo      | 2006 |         1 |         0 |         2 |
|             4 | Celesti   | Nicolò     | 2005 |         0 |         0 |         0 |
|            15 | Carbone   | Lorenzo    | 2006 |         0 |         0 |         0 |
|            25 | Corallo   | Luca       | 2005 |         0 |         0 |         0 |
|            10 | Marroni   | Ivan       | 2005 |         0 |         0 |         0 |
|            21 | Bianchi   | Antonio    | 2005 |         0 |         0 |         0 |
|            11 | Beige     | Andrea     | 2006 |         0 |         0 |         0 |
|            30 | Neri      | Tommaso    | 2006 |         0 |         0 |         0 |
+---------------+-----------+------------+------+-----------+-----------+-----------+
16 rows in set (0,01 sec)

Pagina 1 2 3 4 5 6 7 8