ESERCITAZIONE 4
Comandi SQL a più tabelle ed importazioni


ESERCIZIO 1 - IV-M2.4A.1

- Importare il vocabolario (file TAB-TEXT) nel file di access VOCABOLARIO.MDB.

a) Costruire il comando SQL che richiede un vocabolo in italiano e restituisce la sua traduzione in inglese e francese

- Costruire i comandi SQL che restituiscano queste statistiche relative al solo vocabolario Italiano:

b) Numero totale di caratteri presenti nel vocabolario italiano
c) Numero totale di caratteri, escludendo gli spazi iniziali e finali, presenti nel vocabolario italiano
c1) Numero totale di caratteri, escludendo tutti gli spazi (anche quelli in mezzo), presenti nel vocabolario italiano
d) Elenco delle lettere iniziali con a fianco il numero di parole del vocabolario italiano che iniziano per quel carattere
e
) Elenco delle lettere finali con a fianco il numero di parole del vocabolario italiano che finiscono per quel carattere
f
) Numero di parole che iniziano e terminano con la stessa lettera. Non è necessario visualizzare le lettere che non soddisfano questa proprietà nel vocabolario italiano.
g) Numero di parole raggruppate per numero di caratteri. Le parole oltre i 25 caratteri devono essere considerate in un'unica voce ">25"
h) Costruire il comando SQL che restituisce quante volte il carattere "a" si presenta nel vocabolario italiano (utilizzare la funzione VBA Replace se uso office2000 o superiore)


2° Parte (soluzione a più tabelle)

Per risolvere i seguenti esercizi è necessario usare la tabella di supporto ALFABETO contenente tutte le 26 lettere.

{ suggerimento:

- creare la tabella Alfabeto con il comando SQL:

Create table Alfabeto (Lettera TEXT(1))
- popolare la tabella Alfabeto con il seguente comando SQL di accodamento:
INSERT INTO Alfabeto ( Lettera )
SELECT UCase(Left([Italiana],1)) AS Lettera
FROM Vocabolario
WHERE (((Asc(UCase(Left([Italiana],1))))<=Asc("Z")
And (Asc(UCase(Left([Italiana],1))))>=Asc("A")))
GROUP BY UCase(Left([Italiana],1));


oppure, per creare  e popolare la tabella Alfabeto, utilizzare la query di creazione per accodamento  seguente:

SELECT UCase(Left([Italiana],1)) AS Lettera INTO Alfabeto
FROM Vocabolario
WHERE (((Asc(UCase(Left([Italiana],1))))<=Asc("Z")
And (Asc(UCase(Left([Italiana],1))))>=Asc("A")))
GROUP BY UCase(Left([Italiana],1));

}

f1) Costruire il comando SQL che visualizza il numero di parole che iniziano e terminano con la stessa lettera (devono essere visibili tutte le lettere dell'alfabeto!).
h1) Costruire il comando SQL che restituisce, per ogni lettera dell'alfabeto, quante volte ogni carattere si è presentato nel vocabolario italiano
i) Costruire il comando SQL che restituisce, per ogni lettera dell'alfabeto, il numeri di parole del vocabolario italiano che la contengono
l) Costruire il comando SQL che restituisce il numero di parole che contengono 1 occorrenza, 2 occorrenze, ... n-occorrenze di una determinata lettera e questo per ogni lettera



P.S.: Le statistiche richieste riguardano il vocabolario in italiano. Salvare le query prodotte come nella figura sottostante

ESERCIZIO 2  - IV-M2.4A.2

Si consideri il seguente database utilizzato per registrare tutte le formazioni delle squadre di calcio italiane e le marcature realizzate partire dall'anno 1898.

 

COSTRUIRE I COMANDI SQL CHE  FORNISCONO QUESTI RISULTATI:

a) Formazione del Brescia del  3 novembre 1998
b) Visualizzare i cognomi dei più grandi goleador in ordine decrescente (escludi gli autogoal)
c) Massimo numero di giorni di presenza nella stessa squadra
d) Elenco delle squadre dove ha militato "Roberto Baggio"
e) Elenco delle squadre iscritte al campionato di serie A nell'anno 1978-1979 con sede legale a Milano
f) Elenco contenente il numero di squadre iscritte al campionato di serie B suddiviso per anno di campionato
g) Elenco delle squadre non iscritte ad alcun campionato nel 1999-2000
h) Elenco di tutti i giocatori di serie B che hanno giocato almeno un giorno nel 2001-2002
i) Giocatori del Milan che il cui cognome inizia per C che hanno giocato nel campionato del 2001-2002 e che abbiano fatto almeno un autogoal
l) Elenco dei giocatori che non hanno mai giocato nel Brescia.

ESERCIZIO 3  - IV-M2.4A.3

Sempre riferendosi al DB dell'esercizio 2 illustrare il risultato dell'esecuzione di questi comandi SQL

1) SELECT NOMESQUADRA, SERIE
  FROM IscrizioniCampionato
  ORDER BY ANNOCAMPIONATO;

2) SELECT [Cognome] & " " & [Nome] AS Nominativo, DallaData, AllaData
  FROM Formazioni, Calciatori
  WHERE (NomeSquadra='BRESCIA') AND
  (Calciatori.IdCalciatore=Formazioni.IdCalciatore)
  ORDER BY Formazioni.DallaData;

3) SELECT Calciatori.Cognome, Calciatori.Nome, Count(*) AS NrGoal
  FROM Formazioni, Calciatori, Marcature
  WHERE (Marcature.idFormazione=Formazioni.IdFormazione) AND
  (Formazioni.IdCalciatore=Calciatori.IdCalciatore)
  GROUP BY Calciatori.Cognome, Calciatori.Nome;

4) SELECT Calciatori.Cognome & ' ' & Calciatori.Nome AS NomeCalciatore, 
  Formazioni.Ruolo FROM Calciatori, Formazioni
  WHERE (Calciatori.Cognome='Baggio') AND (Calciatori.Nome='Roberto')
  AND (Calciatori.idCalciatore = Formazioni.idCalciatore)

5) SELECT Calciatori.Cognome FROM Calciatori
  WHERE IdCalciatore NOT IN (SELECT idCalciatore FROM Formazioni
  WHERE (Formazioni.NomeSquadra="MILAN"));

6) SELECT Calciatori.Cognome, Calciatori.Nome FROM (Calciatori LEFT JOIN Formazioni
  ON Calciatori.idCalciatore = Formazioni.idCalciatore) LEFT JOIN Marcature ON
  Formazioni.idFormazione = Marcature.idFormazione
  WHERE (Formazioni.Ruolo='Portiere') AND NOT (Marcature.idFormazione Is Null)

  GROUP BY Calciatori.Cognome, Calciatori.Nome;

7) SELECT Calciatori.Cognome, Calciatori.Nome, Count(*) AS NrAutogol
  FROM (Calciatori LEFT JOIN Formazioni
  ON Calciatori.idCalciatore=Formazioni.idCalciatore)
  LEFT JOIN Marcature ON Formazioni.idFormazione = Marcature.idFormazione
  WHERE (Marcature.Autogol=True)
  GROUP BY Calciatori.Cognome, Calciatori.Nome;

8) SELECT Formazioni.NomeSquadra, Sum(IIf(IsNull(Marcature.idFormazione),0,1)) AS NrGoal
  FROM Formazioni LEFT JOIN Marcature ON Formazioni.idFormazione = Marcature.idFormazione
  GROUP BY Formazioni.NomeSquadra;


9
)
SELECT Formazioni.NomeSquadra, Count(*) AS NrGoal
  FROM Formazioni RIGHT JOIN Marcature ON Formazioni.idFormazione = Marcature.idFormazione
  GROUP BY Formazioni.NomeSquadra;