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