lnx.brescianet.com
Sito didattico - Prof. Sechi Marco
FAQ
Profilo
Cerca
Lista utenti
Non ci sono nuovi messaggi
Gruppi
Log out [ e01692 ]
4M - Modulo 2
Vai a 1, 2 Successivo
Indice del forum -> Classe 4M - 2° Modulo
Precedente :: Successivo
Autore
e01692
Site Admin
Registrato: 09/09/07 08:22
Messaggi: 229
Messaggio
Inviato: 22 Nov 2007 10:00 am
Oggetto: 4M - Modulo 2
Appunti illustrati durante le lezioni
Top
e01692
Site Admin
Registrato: 09/09/07 08:22
Messaggi: 229
Inviato: 22 Nov 2007 10:00 am
Oggetto: 4M - 22/11/2007
Le ricerche possono essere fatte anche su campi non indicizzati ma risultano + lente
le Query servono:
1) a selezionare alcune colonne della tabella
2) ordinare
3) selezionare
Se in una query ordino per + campi quello che ha precedenza è quello che si trova + a sinistra
SELECT idAlunno, Provincia, Nominativo
FROM TblAlunni
ORDER BY Provincia, Nominativo DESC;
DESC ==> decrescente
ASC ==> crescente ==> è il default e pertanto non viene mai usato
I campi con elenchi a discesa vanno solitamente indicizzati
Nel pannello di disegno delle query se scrivo NomeNuovo:NomeCampo ==> rinomino il campo
equivale a
SELECT NomeCampo AS NomeNuovo FROM Tabella
i comandi SQL non sono CASE SENSITIVE
In un comando SQL i nomi non abbinati ai campi delle tabelle indicate dopo la clausola FROM
non verranno riconosciuti. Pertanto ne verrà richiesta la loro valorizzazione. Tali nomi diventano
delle vere e proprie variabili SQL che consentiranno la creazione di Query Parametriche
select * from CLIENTI WHERE Fatturato <200 AND FATTURATO >100
Il valore delle condizioni nella clausola WHERE saranno TRUE o FALSE. Verranno estratte
le righe per cui la condizione vale TRUE
I confronti che coinvolgono campi testuali richiedono sempre nelle costanti l'uso del singolo apice
esempio
SELECT * FROM Provincia='BS'
E' errato scrivere
SELECT * FROM Provincia=BS ==> l'SQL chiederà di valorizzare BS
Condizione1 OR condizione2 AND condizione3
equivale a
Condizione1 OR (condizione2 AND condizione3)
L'operatore AND ha precedenza sull'operatore OR
I confronti che coinvolgono campi data richiedono sempre nelle costanti l'uso dello #
esempio
SELECT * FROM Provincia=#12/01/2007# ==> 1° dicembre 2007
"10/01/1900" > "01/12/2007" vera
#01/10/1900# < #12/01/2007# vera
riprendere da like
dato per lunedi esercizi a,b,c d
Top
e01692
Site Admin
Registrato: 09/09/07 08:22
Messaggi: 229
Inviato: 23 Nov 2007 08:43 am
Oggetto: 4M - 23/11/2007
SELECT Nominativo & " (" & provincia & ")"
FROM TblAlunni;
nr studenti
SELECT count(*) as nr
FROM TblAlunni;
Top
e01692
Site Admin
Registrato: 09/09/07 08:22
Messaggi: 229
Inviato: 26 Nov 2007 08:34 am
Oggetto: 4M - 26/11/2007
---------------SELECT Nominativo & " (" & provincia & ")"
FROM TblAlunni;
nr studenti
SELECT count(*) as nr
FROM TblAlunni;
-------------------------Nr totale di studenti
SELECT Count(*) AS NR FROM TblAlunni;
Nr studenti di 4M
SELECT Count(*) AS NR FROM TblAlunni Where classe='4M';
Select MIN(NatoIl) AS [Data di nascita dell'alunno + vecchio] FROM tblAlunni
"12/01/2007" <> #12/01/2007#
* detto carattere JOLLY
like è un operatore di confronto
like ==> lavora in modo sequenziale ==> lento
‘A*’ ==> iniziano per A
‘*A’ ==> finiscono per A
‘*A*’ ==> contengono A
SELECT * FROM Clienti WHERE ([Ragione Sociale] LIKE ‘*SPA’) or ([Ragione Sociale] LIKE ‘*S.P.A.’)
[NOME] & [Cognome] ==> unisco i due campi testuali mediante concatenazione
"Marco" & "Sechi" ==> "MarcoSechi"
SELECT Count(idalunno) AS NRstudenti
FROM TblAlunni;
oppure
SELECT Count(*) AS NRstudenti
FROM TblAlunni;
min
max
avg (media)
sum (somma)
first
last
Il comando GROUP BY ==> elimina i duplicati e visualizza le singole istanze dei valori presenti nel
campo indicato dopo GROUP BY
Tabelle PIVOT ==> statistica rispetto a 2 parametri: esempio distribuzione dei promossi, bocciati,
rimandati per classe
SELECT Classe, Esito, Count(*) FROM Studenti GROUP BY Classe,Esito
Quando raggruppo per + campi verranno raggruppati per combinazioni (esempio estraggo una singola
istanza per ogni coppia Classe, esito eliminando così i duplicati)
SELECT CLASSE FROM TblAlunni GROUP BY CLASSE
SELECT CLASSE, COUNT(*) AS NRStudenti, AVG(Voto) AS MEDIAClasse FROM TblAlunni GROUP BY CLASSE
Nr di studenti per classe e provincia
SELECT CLASSE, PROVINCIA, COUNT(*) AS NRStudenti FROM TblAlunni GROUP BY CLASSE, PROVINCIA
Top
e01692
Site Admin
Registrato: 09/09/07 08:22
Messaggi: 229
Inviato: 30 Nov 2007 08:49 am
Oggetto: 4M - 30/11/2007
CHR(Argomento) ==> argomento da 0 a 255
Nr di studenti per lettera iniziale (distribuzione delle lettere iniziali)
SELECT left(nominativo,1) AS Iniziale, Count(*) AS NR
FROM TblAlunni
GROUP BY left(nominativo,1)
(distribuzione per lunghezza)
SELECT len(nominativo) AS NrCaratteri, Count(*) AS NR
FROM TblAlunni
GROUP BY len(nominativo)
(lunghezza della parola + lunga)
SELECT max(len(nominativo)) AS [Il nominativo più lungo ]
FROM TblAlunni
mid(nominativo,i,1) ==> estraggo l'i-esimo carattere del nominativo
InstrRev(Argomento,frasecercata) ==> restituisce la posizione dell'ultima occorrenza della
frasecercata dentro la stringa argomento.
SELECT * FROM ALUNNI WHERE Instr(Nominativo,"A") >0 ==> elenco degli studenti che hanno almeno
una lettera A dentro il nominativo - è equivalente a:
SELECT * FROM ALUNNI WHERE Nominativo like "*A*"
Nominativo ==> "Marco Sechi"
SELECT mid(Nominativo,Instr(Nominativo," ")+1) AS Cognome,
left(Nominativo,Instr(Nominativo," ")-1) AS NOME FROM TblAlunni
Instr(Nominativo," ") ==> 6
Instr(Nominativo," ")+1 ==> 7
mid(nominativo,7) ==> Sechi
Instr(Nominativo," ")-1 ==> 5
left(Nominativo,5) ==>Marco
trasformazione Data Testuale ==> DataReale
20020105
SELECT right(DataTestuale,2) & "/" & mid(DataTestuale,5,2) & "/" & left(DataTestuale,4) AS
DataTrasformata FROM TblAlunni
Se non ho il tipo dataora posso usare un campo di tipo testo o numerico con anno mese giorno
Scrivendo in questo modo la data l'ordinamento alfabetico (numerico) viene a coincidere con quello
cronologico
Top
e01692
Site Admin
Registrato: 09/09/07 08:22
Messaggi: 229
Inviato: 03 Dic 2007 07:58 am
Oggetto: 4M - 03/12/2007
FILE DI TESTO: sequenza di caratteri priva di caratterizzazioni tipografiche.
Word nel suo formato proprietario non registra in tipo testo perché deve mantenere le info sui margini, dimensioni, allineamenti etc. E’ il
formato + leggibile (portabile)
I file di testo sono altamente portabili (ovvero leggibili da qualsiasi prg o sistema operativo).
Vengono quindi usati per trasferire i dati tra due DB differenti.
Per formato intendo una modalità di registrazione dell’informazione. Word salva i propri documenti nel suo formato. Solo i programmi che
conoscono tale formato sono in grado di importare i documenti di word.
FORMATO TAB-TEXT
E’ il formato + importante per lo scambio di dati tra applicativi di tipo gestione archivi (DATABASE).
Il formato Tab-text è caratterizzato da un numero di righe contenente ognuna un record
(sostanzialmente una scheda di un archivio). Ogni campo è separato dal carattere ascii 9 (il TAB) Ogni riga è terminata dall’invio
(vbcrlf ovvero codifica Ascii 10+13 carriage return e line feed)
COME COLLEGARE:
Pannello Tabelle - Menu Contestuale: Collega Tabelle ... - Nel tipo file selezionare testo Selezionare il tipo di file delimitato - cliccare sul bottone in basso "Avanzate" e definire i tipi
La differenza tra collegare un db esterno dall'importare sta nel fatto che nell'importazione i dati
vengono effettivamente registrati dentro il file mdb
I quadratini in figura sono dei caratteri non stampabili (in tab-text è lo stesso tab)
File di Testo Delimitato: si tratta di documenti contenenti caratteri di separazione tra un campo
ed il successivo: TAB-TEXT, CSV
esempio di csv (commas separated value):
“Marco Sechi”,”Informatica”,”Liceo”,"00025"<invio>
”Mario Rossi”,”Storia”,”Liceo”<invio>
I file TAB-TEXT sono + diffusi poichè non danno luogo a possibili fraintendimenti (la , potrebbe essere
contenuta in un campo di un record particolare)
I file TAB-TEXT sono file delimitati dal carattere TAB
A Larghezza fissa: Questo è il formato + utilizzato in ambiente mainframe (computer dotati di terminali adatto ad database [archivi] di
dimensioni notevoli). In questo formato i campi (colonne) occupano sempre la stessa dimensione in caratteri
Esempio
Dal carattere 1 al 20 è Nominativo (se un nominativo è + corto verrà riempito con degli spazi)
Dal 21 al 22 è la classe
Dal 23 al 75 è indirizzo
La dimensione è definita
1234567890123456789012345678901234567890
Marco Rossi 2NVIA NON SAPREI 12
Luca Bruno 2Mpiazza ti la,222
La differenza tra collegare ed importare sta nel fatto che nel 2° caso i dati vengono acquisiti all'interno
del file MDB e pertanto è possibile applicare delle modifiche alla struttura - Lo svantaggio è che
i dati importati rappresentano una fotografia istantanea che perde subito di attualit à se i dati originali
sono soggetti a modifiche.
Le tabelle collegate facendo riferimento a dati esterni invece contengono quasi sempre gli aggiornamenti
sui dati (quindi risultano sempre attuali) ma il loro accesso è generalmente + lento poichè non posso
costruire meccanismi come indici su questo tipo di tabelle
I file a larghezza fissa sono usati per i spool di stampa ===> quando stampo degli elenchi alla stampante
arriva un file che può essere intercettato e salvato su file. L'importazione consentirà di rielaborare
poi i dati consentendo ad esempio una riclassificazione di bilancio che il ns prg di contabilità
non ha previsto
La frecciettina in parte all'icona della tabella indica che è la tabella non è dentro quell'MDB ma
è esterna (collegata)
DBServer:
1) Accesso a livello utente ==> ogni utente può leggere i dati che sono di sua competenza
2) I tipi di dati disponibili differiscono da db a db
3) Un db Server è un programma dedicato alla gestione dei dati. Rimane in attesa di comandi SQL (testuali)
e restituisce al client i dati risultanti dal comando ricevuto. I Db Server non hanno un'interfaccia
per costruire applicazioni standalone come invece abbiamo visto in access. Sono dedicate all'ottimizzazione
delle ricerche
ACCESS come Front-end ==> Access consente di costruire applicazioni in tempi relativamente brevi. Non
è performante nelle ricerche sopprattutto in un ambiente di rete con un numero di stazioni superiore a 5.
Pertanto si collega l'applicazione in access ad un db server (che nelle situazioni in rete è agilerrimo)
Spiegato perchè collego anche tabelle esterne appartenenti ad un file MDB ==> per separare la parte programma
dalla parte dati - Se aggiorno un programma contenuto in un MDB che ha anche i dati ==> ricopro quelli
che sono in linea (quando sostituisco il file)
Top
e01692
Site Admin
Registrato: 09/09/07 08:22
Messaggi: 229
Inviato: 06 Dic 2007 10:18 am
Oggetto: 4m - 06/12/2007
I file a larghezza fissa sono usati per i spool di stampa (stampa su file e non su stampante fisica) ===> quando stampo degli elenchi alla
stampante
arriva un file che può essere intercettato e salvato su file. L'importazione consentirà di rielaborare
poi i dati consentendo ad esempio una riclassificazione di bilancio che il ns prg di contabilità
non ha previsto
Riprendere questo
La differenza tra collegare ed importare sta nel fatto che nel 2° caso i dati vengono acquisiti all'interno
del file MDB e pertanto è possibile applicare delle modifiche alla struttura - Lo svantaggio è che
i dati importati rappresentano una fotografia istantanea che perde subito di attualit à se i dati originali
sono soggetti a modifiche.
Le tabelle collegate facendo riferimento a dati esterni invece contengono quasi sempre gli aggiornamenti
sui dati (quindi risultano sempre attuali) ma il loro accesso è generalmente + lento poichè non posso
costruire meccanismi come indici su questo tipo di tabelle
Lettera iniziale maiuscola ed il resto minuscolo
Select Ucase(left(Cognome,1)) & Lcase(mid(Cognome,2)) FROM ALUNNI
"Ciao " & "Marco" ==> "Ciao Marco"
"Ciao " + "Marco" ==> "Ciao Marco"
"1" & 1 ==> "11"
1 + "1" ==> 2
"Ciao " & [ComeTichiami] ==> Access richiede di valorizzare [ComeTichiami] e dopo concatena
Creo un'alenco con campi a larghezza fissa (20 char per il cognome e 10 per il nome)
SELECT Cognome & SPACE(20-LEN(Cognome)) & Nome & Space(10-LEN(Nome)) FROM Alunni
format("ciao",String(20,"@")) ==> "ciao " (è lunga 20 caratteri)
Allineamento a destra (colonna larga 10 caratteri) - Il campo IMPORTO è un numerico ad esempio LONG
SELECT SPACE(10-LEN(Cstr(Importo))) & Cstr(Importo) FROM Acquisti
format(Cstr(Importo),"!@@@@@@@@@@")
Incolonnamento a destra
123
23444
1
------
select String(len(Password),"*") FROM Alunni
Replace("123.21", "." , ",") ==> "123,21
SELECT (clng(Date()) - Clng(ScadenzaFattura)) AS GiorniPassatiDallaScadenzaDellaFattura FROM Fatture
len(Parola) - len(replace(Parola,"a","")) ==> numero di lettere A in una parola (il - è un meno)
SELECT SUM(len(Parola) - len(replace(Parola,"a",""))) FROM VOCABOLARIO ==> nr totale di lettere A
replace("12/09/2007","/","-") ==> " 12-09 -2007"
DIVISIONE INTERA
36 DIV 10 ==> 3
39 DIV 5 ==> 7
fix(x/y) ==> divisione intera
RESTO
36 MOD 10 ==> 6
EQUIVALE A
x -fix(X/Y)*Y
formt(now(),"d dd")
CDate("01/01/2005") ==> #01/01/2005#
CDate("1 GENNAIO 2005") ==> #01/01/2005#
nella maschera di formato le lettere che devono essere riportate pari pari devono essere precedute da
\
Format(Date(),"yyyymmdd") ==> 20071206 se oggi è 06/12/2007
SELECT Format(NatoIl,"yyyymmdd") FROM Alunni ==> estraggo le date in una notazione alfabetica
compatibile con quei DB che non supportano il tipo Data/Ora
\
39 MOD 5 ==> 4
Top
e01692
Site Admin
Registrato: 09/09/07 08:22
Messaggi: 229
Inviato: 07 Dic 2007 08:42 am
Oggetto: 4M - 07/12/2007
---Una variabile (o campo) che ha come valore "" oppure 0 non può essere considerata NULL
SELECT IIF(ISNULL(Assenza),"Omnipresente","Talvolta si è assentato") FROM ASSENZE
SELECT IIF(ISNUMERIC(Eta), CLng(Eta),"Non inserita") AS ETA FROM ALUNNI
SELECT (NOW()-DatoAtmosfericoRilevatoIL) AS Seconditrascorsi FROM BL_CentralinaDiRilevamentoAtmosferico
TIME() equivale a Now()-Date()
Nr di studenti nati per anno
SELECT Year(NatoIL), Count(*) AS Nr FROM ALUNNI GROUP BY Year(NatoIL)
Nr di nati per giorno della settimana
HOUR(Now()) = 9
Esercitazione per le prossime 3H
Soluzione 1° Esercizio del VOcabolario
- SELECT UK, FR FROM Vocabolario WHERE ITA=[Dammi la parola in Italiano da tradurre]
Top
e01692
Site Admin
Registrato: 09/09/07 08:22
Messaggi: 229
Inviato: 17 Dic 2007 08:48 am
Oggetto: 4m - 17/12/2007
--------------------------------------Traduzione in Inglese, FRancese
SELECT UK, FRA
FROM Vocabolario
WHERE ITA=[dammi parola da tradurre]
nr caratteri totale
SELECT SUM(Len(ITA)) AS NRCHAR
FROM Vocabolario;
nr caratteri totale senza spazi iniziali/finali
SELECT SUM(Len(TRIM(ITA))) AS NRCHAR
FROM Vocabolario;
nr caratteri totale senza spazi
SELECT sum(len(Replace(ita," ",""))) AS nr
FROM vocabolario;
Nr parole per singola lettera iniziale
SELECT ucase(Left(ita,1)) AS Iniziale, count(*) as nr
FROM vocabolario
WHERE asc(ucase(Left(ita,1)))<=90 AND asc(ucase(Left(ita,1)))>=65
GROUP BY ucase(Left(ita,1))
Nr parole per singola lettera finale
SELECT ucase(right(ita,1)) AS Finale, count(*) as nr
FROM vocabolario
WHERE asc(ucase(right(ita,1)))<=90 AND asc(ucase(right(ita,1)))>=65
GROUP BY ucase(right(ita,1))
Nr parole che iniziano e finiscono con la stessa lettera
SELECT left(ITA,1), count(*) as nr FROM
VOCABOLARIO
WHERE left(ITA,1)=right(ITA,1) and len(ITA) >1
GROUP BY LEFT(ITA,1)
Distribuzione per lunghezza (il group by deve comprendere tutti i campi presenti nel select o nell'order)
SELECT iif(len(ita)>25,">25", len(ita)) as nrcaratteri, count(*) as nr
from vocabolario
group by iif(len(ita)>25,">25", len(ita)), iif(len(ita)>25,26, len(ita))
order by iif(len(ita)>25,26, len(ita))
Conto le parole che contengono la A
H ) SELECT COUNT(*) AS NR
FROM Vocabolario WHERE INSTR(ITA,"A") >0;
OPPURE
H) SELECT COUNT(*) AS NR
FROM Vocabolario WHERE ITA LIKE "*a*"
Conto le volte in cui ho la lettera A
Top
e01692
Site Admin
Registrato: 09/09/07 08:22
Messaggi: 229
Inviato: 20 Dic 2007 10:10 am
Oggetto: 4M - 20/12/2007
Nr di lettere A
SELECT sum( len(ita) -len(Replace(ita,"a",""))) AS nrA
FROM Vocabolario;
Usare sempre questo schema
select idprodotto
from
where
group by
order by
Per evitare omonimie (un nome di campo presente in due tabelle <>) si inserisce anche
il nome della tabella
Se i nomi dei campi o delle tabelle hanno spazi scriverli tra []
[Tabella studenti].[Matricola Alunno]
I campi (esclusi quelli statistici) della clausola SELECT e ORDER BY vanno messi nella clausola
GROUP BY (se è chiaramente presente)
Elenca i prodotti (con i nomi) e le quantità vendute per ogni singola riga fattura
SELECT Prodotti.idProdotto, Prodotti.DescrProdotto, RigheProdotti.Qta
FROM Prodotti INNER JOIN RigheProdotti ON Prodotti.idProdotto = RigheProdotti.idProdotto;
Studenti che ho interrogato e che hanno la suff.:
SELECT Cognome
FROM alunni,voti
WHERE voti.idAlunno=Alunni.idAlunno and voti.voto >=6
GROUP BY COGNOME
Elenco dei prodotti con in parte se è stato venduto o meno
SELECT Prodotti.idProdotto, Prodotti.DescrProdotto, iif(RigheProdotti.idProdotto Is Null,"Invenduto","Venduto") as stato
FROM Prodotti LEFT JOIN RigheProdotti ON Prodotti.idProdotto = RigheProdotti.idProdotto
GROUP BY Prodotti.idProdotto, Prodotti.DescrProdotto, iif(RigheProdotti.idProdotto Is Null,"Invenduto","Venduto")
Elenco alunni da interrogare
SELECT Cognome
FROM Alunni left join voti on voti.idAlunno=Alunni.idAlunno
WHERE voti.idAlunno is null
Top
e01692
Site Admin
Registrato: 09/09/07 08:22
Messaggi: 229
Inviato: 21 Dic 2007 08:49 am
Oggetto: 4M - 21/12/2007
se devo conteggiare situazioni dove ho valori nulli non devo usare il count(*) ma
SUM(IIF(ISNULL(TestateFatture.idCliente),0,1))
Top
e01692
Site Admin
Registrato: 09/09/07 08:22
Messaggi: 229
Inviato: 07 Gen 2008 08:51 am
Oggetto: 4M - 07/01/2008
NO JOIN ==> usato per analizzare tutte le possibili combinazioni tra due tabelle (quindi anche di
non relazione)
I campi senza duplicati non chiave vengono detti chiave eleggibile - di regola tra i diversi campi
chiave eleggibili verrà scelto quello che risulta più comodo ai ns scopi
net tipo BIT lo 0 corrisponde al falso mentre 1 al vero
Gli indici sono strutture dati atte a velocizzare ricerche ed ordinamenti . i campi che collegano tabelle
vanno sempre indicizzati
WITH IGNORE NULL tutti i record che hanno il campo indicizzato a nullo verranno esclusi dall'indice.
Si pensi a 10000 studenti con il campo NATOIL compilato solo per 1000 - Indicizzare su tutti i record
rende l'indice meno performante (e soprattutto superfluo) rispetto ad indicizzare solo i 1000 compilati
Top
e01692
Site Admin
Registrato: 09/09/07 08:22
Messaggi: 229
Inviato: 10 Gen 2008 10:12 am
Oggetto: 4M - 10/01/2008
Quando ho query molto complesse (che richiedono ore per la loro esecuzione) generalmente i dati
non vengono visualizzati ma salvati in tabelle temporanee di veloce accesso - Queste tabelle quando
diventano obsolete verranno rimosse mediante dei drop table
FOREIGN KEY ==> campo di collegamento nella tabella slave
Nelle Qry di accodamento va rispettato l'ordine dei campi ed il tipo
Aggiorno l'anno prossimo gli studenti attivi e reattivi da 4M a 5M
UPDATE STUDENTI
SET Classe='5M'
WHERE Classe='4M' AND Promosso=true
Aggiorno del 10% i prezzi
UPDATE Listino
SET Prezzo=Prezzo*1.1
Aggiorno il nominativo la dove mi sono dimenticato di farlo
UPDATE Studenti
SET Nominativo=Cognome & ' ' & Nome
WHERE Nominativo IS NULL
Top
e01692
Site Admin
Registrato: 09/09/07 08:22
Messaggi: 229
Inviato: 14 Gen 2008 09:21 am
Oggetto: 4M - 13/01/2008
------table studentileonardo union table studenticopernico union table studenticalini
le query con union all sono + veloci poichè non vengono ricercati i duplicati nelle singole tabelle.
posso fare la union tra due o + tabelle se la struttura dei dati risulta compatibile rispetto al tipo di
dato. Se il primo campo della tabella studentileonardo è testuale allora in tutte le tabelle il primo deve
esseretestuale. Non ci sono vincoli sul nome
===============
le sottoquery sono facoltative nell'orale - non ci saranno nello scritto - se necessarie vanno
applicate nell'esercitazione
Le ricerchè fulltext sono usate dai motori di ricerca - in access non esiste ma devo inserire
tutti i singoli vincoli sui campi che ci interessano
---in altri sql al posto di * si usa %
Le Query incrociate sono usate per rappresentare statistiche relative a 2 parametri. Esempio
Assenze di ogni studente per mese
Vendite per prodotto rispetto a ogni regione
SELECT Classe, Format(AssenzaDel,"mmmm") AS MESE, count(*) From ASSENZE
group by Classe, Format(AssenzaDel,"mmmm")
(se non ho la classe registrata nella tabella assenze devo sfruttare i link)
SELECT Studenti.Classe, Format(AssenzaDel,"mmmm") AS MESE, count(*) From ASSENZE, STUDENTI
WHERE Studenti.idstudente=Assenze.IdStudente
group by Studenti.Classe, Format(AssenzaDel,"mmmm")
Top
e01692
Site Admin
Registrato: 09/09/07 08:22
Messaggi: 229
Inviato: 02 Feb 2008 08:12 am
Oggetto: ESEMPI INTERROGAZIONI
Esercizio 1 - Transiti Auto
------------------------------Tabelle
PROPRIETARIO (IdProprietario (chiave - contatore) , Nominativo , NatoIl)
AUTO (Targa (Chiave), Modello (non nullo), IdProprietario)
TRANSITO (idTransito , DataTransito, Targa, TipoTransito {entrata - uscita})
1) Nr di transiti per GG (lunedi, martedi ..) [1]
2) Elenco delle auto che non hanno transiti [2]
3) Creazione tabella auto (targa chiave - idproprietario collegato a un tipo
contatore - modello non nullo) [2]
4) Inserimento dalla tabella NuoveAuto di tutti i veicoli in essa registrati
nella tabella AUTO [1]
5) Elenco dello auto con il nr di transiti in entrata [2]
6) Elenco proprietari il cui nominativo contiene la lettera "A" nati il 29
febbraio [1]
Esercizio 2 - Conti Correnti
-------------------------------Tabelle
CLIENTE (IdCliente (chiave - contatore) , RagioneSociale)
CC (IdCC (Chiave - contatore), idCliente (non nullo), ApertoIl, ChiusoIl)
MOVIMENTI (idMovimento (chiave) , idCC, DataMovimento, Importo, TipoMovimento {Versamento - Prelievo})
1) Nr movimenti per mese (gennaio, febbraio ...) [1]
2) Massimo numero di giorni di apertura di un cc (se un cc non è stato chiuso uso come riferimento la data di oggi) [1]
3) Elenco dei cc non movimentati [2]
4) Elenco dei clienti con il nr di CC aperti da ciascuno [2]
5) Creazione della tabella MOVIMENTI (solo campi idMovimento, idcc, importo) [2]
6) Elenco dei nomi dei clienti visualizzato in modo che la prima lettera sia
maiuscola e il resto minuscolo
Esercizio 3 - Biblioteca
-------------------------PERSONE (IdPersona (chiave - contatore) , Nominativo , NatoIl)
LIBRI (CodiceLibro (testo di 10 caratteri - Chiave), Titolo (non nullo),Genere , Prezzo (in euro))
PRESTITO (idPrestito (contatore - chiave), IdPersona, CodiceLibro, PrestatoIl, RestituitoIl)
1) Elenco delle persone che hanno letto un libro senza duplicati [2]
2) Nr di prestiti che hanno superato i 30 giorni (se la data di restituzione è nulla si considera come data oggi) [1]
3) Elenco di tutti i prestiti con il nome del libro , della persona e la data di inizio prestito [2]
4) Creazione della tabella prestiti [solo i campi richiesti] (idPrestito: contatore chiave - idpersona collegato a un tipo contatore InizioPrestito Data/ora) [2]
5) Importo totale speso per ogni genere [1]
6) Nr Prestiti per mese [1]
Esercizio 4 - Alunni e Voti
-----------------------------ALUNNI (IdAlunno (contatore - chiave), Nominativo, Classe, NatoIl)
VOTI (IdVoto, IdAlunno (non nullo), DataVoto, Voto (senza decimali), Materia)
1) Elenco degli studenti con nome e cognome separato in due colonne. (Suppongo che lo spazio separi sempre il cognome dal nome) [2]
2) Qry incrociata che consenta di visualizzare la media dei voti di ogni studente (devo vedere il nominativo) in ogni materia [2]
3) Creazione tabella voti (IdVoto (contatore - chiave), IdAlunno (collegato a tipo contatore), Voto (senza decimali da 1 a 10)) [2]
4) Eliminare la colonna NatoIl nella tabella contatore [1]
5) Media dei voti per classe [2]
6) Elenco degli studenti che non sono mai stati interrogati [2]
7) Nr di studenti nati nel 1992 o 1988 [1]
Esercizio 5 - Fatture
----------------------Si consideri la struttura presentata negli appunti in linea.
1) Qry di creazione tabella clienti (IdCliente (contatore chiave) – Ragione sociale (Non nullo) – DataRegistrazione) [2]
2) Qry che elimina tutti i clienti che iniziano per A [1]
3) Elenco delle fatture che sono state emesse in febbraio e marzo 2006 [1]
4) Inserimento dei dati contenuti nella tabella ClientiStranieri nella tabella clienti [1]
5) Nr di prodotti venduti per mese (con nome prodotto) [2]
6) Nr fatture per cliente [2]
7) Prodotti venduti nel 2006 [2]
8) Inserimento di un nuovo cliente a piacere [1]
Esercizio 6 - Installazioni software
---------------------------------------PC (idPC, Modello, MemoriaInstallata (numerico con decimali))
SOFTWARE (idSW, Nome, Prezzo)
INSTALLAZIONI (idInstallazione, IdSW, IdPC, DataInstallazione)
1) Importo complessivo installato per ogni software (deve apparire il nome del programma) [2]
2) Creazione tabella Software (idSQ contatore - chiave, Nome (non nullo) Importo (in euro)) [2]
3) Nr PC distinto per modello [1]
4) Installazioni per mese [1]
5) Eliminazioni di tutte le installazioni relative a "WORD" (il codice idSW è sconosciuto) [2]
6) Inserimento di un nuovo PC con 1,5 Mb di ram [1]
7) Elenco dei SW installati senza duplicati [2]
Top
Mostra prima i messaggi di: Tutti i messaggi
Indice del forum -> Classe 4M - 2° Modulo
Vecchi
Vai
Tutti i fusi orari sono GMT
Vai a 1, 2 Successivo
Pagina 1 di 2
Controlla questo argomento
Vai a: Classe 4M - 2° Modulo
Vai
Puoi inserire nuovi argomenti
Puoi rispondere a tutti gli argomenti
Puoi modificare i tuoi messaggi
Puoi cancellare i tuoi messaggi
Puoi votare nei sondaggi
Puoi Moderare questo forum
Amministrazione
Powered by phpBB © 2001, 2005 phpBB Group
phpbb.it
lnx.brescianet.com
Sito didattico - Prof. Sechi Marco
FAQ
Profilo
Cerca
Lista utenti
Non ci sono nuovi messaggi
Gruppi
Log out [ e01692 ]
4M - Modulo 2
Vai a Precedente 1, 2
Indice del forum -> Classe 4M - 2° Modulo
Precedente :: Successivo
Autore
e01692
Site Admin
Registrato: 09/09/07 08:22
Messaggi: 229
Messaggio
Inviato: 12 Feb 2008 11:47 am
Oggetto: 4M - Esercitazione di potenziamento
1) Nr Auto Prodotte per mese ordinato per mese
----------SELECT Format(ProdottaIl,"mmmm") AS Mese, Count(*) AS Nr
FROM Auto
GROUP BY Format(ProdottaIl,"mmmm"), Month(ProdottaIl)
ORDER BY Month(ProdottaIl);
----------2) Elenco delle auto invendute
----------SELECT Auto.*
FROM Auto LEFT JOIN Proprieta ON Auto.idAuto = Proprieta.idAuto
WHERE (Proprieta.idProprieta Is Null);
----------3) Creazione tabella Clienti
----------Create table Clienti
(
idCliente Counter constraint pippo primary key,
Nominativo TEXT(25) constraint caio not null,
Fotarda longbinary
)
----------4) Elenco di nr auto per singolo cliente (compreso chi non ha auto)
----------SELECT Clienti.Nominativo, Sum(iif(isnull(Proprieta.idProprieta),0,1)) AS NR
FROM Clienti LEFT JOIN Proprieta ON Clienti.idCliente = Proprieta.idCliente
GROUP BY Clienti.Nominativo, Clienti.idCliente
----------5) Accodare in AUTO il contenuto della tabella AUTODellaFIAT
----------INSERT INTO AUTO SELECT * FROM AutoDellaFiat
----------6) Nr Auto vendute per anno
----------Select YEAR(AcquistatoIl), Count(*) AS NR
FROM Proprieta
GROUP BY Year(AcquistatoIl)
----------7) Elenco dei modelli auto con a fianco il proprietario
----------SELECT Clienti.Nominativo, Auto.Modello
FROM Clienti, Auto, Proprieta
WHERE Clienti.idCliente=Proprieta.idCliente AND Auto.idAuto=Proprieta.idAuto
----------Top
Mostra prima i messaggi di: Tutti i messaggi
Indice del forum -> Classe 4M - 2° Modulo
Vecchi
Vai
Tutti i fusi orari sono GMT
Vai a Precedente 1, 2
Pagina 2 di 2
Controlla questo argomento
Vai a: Classe 4M - 2° Modulo
Vai
Puoi inserire nuovi argomenti
Puoi rispondere a tutti gli argomenti
Puoi modificare i tuoi messaggi
Puoi cancellare i tuoi messaggi
Puoi votare nei sondaggi
Puoi Moderare questo forum
Amministrazione
Powered by phpBB © 2001, 2005 phpBB Group
phpbb.it
Scarica

4M - Appunti di INFORMATICA