• Non ci sono risultati.

INTERFACCIA QUERY La riga "mostra" serve ad occultare le colonne che occupano una determinata posizione per

N/A
N/A
Protected

Academic year: 2022

Condividi "INTERFACCIA QUERY La riga "mostra" serve ad occultare le colonne che occupano una determinata posizione per"

Copied!
23
0
0

Testo completo

(1)

Pagina 1 di 1

Brescianet.com

Sito di supporto alla didattica

http://lnx.brescianet.com/ScuolaForum2016/

4Q - 2 MODULO

http://lnx.brescianet.com/ScuolaForum2016/viewtopic.php?f=4&t=21

4Q - 2 MODULO

da e01692

Appunti estemporanei

24/1/2017 - 4Q - 2 MODULO

da e01692

linguaggio SQL => linguaggio di interrogazione dei db => usato nelle query

comandi sql => utilizzati nelle pagine web dinamiche per estrarre i dati richiesti dall'utente mediante un forms

INTERFACCIA QUERY

La riga "mostra" serve ad occultare le colonne che occupano una determinata posizione per rispettare un determinato ordinamento (esempio classe, nominativo) ma tale ordine risultA diverso da quello di visualizzazione (esempio prima il nominativo e poi la classe).

MOSTRA => Consente l'occultamento di un campo non necessario (esempio filtro o ordinamento incompatibile con l'ordine di visualizzazione delle colonne)

Criteri sulla stessa riga sono collegati dalla clausola AND (ED ANCHE) Criteri su righe # sono collegati dalla clausola OR (OPPURE)

riprendere dall'SQL

7/2/2017 - 4Q - 2 MODULO

da e01692

SQL => linguaggio di interrogazione strutturato per estrarre dati da un archivio non è case sensitive

select * from studenti => estraggo l'intero contenuto della tabella studenti SELECT => identifica una qry di selezione

FROM => parola chiave a cui segue il nome della tabella dove estrarre i dati

* indica qualsiasi campo SELECT [prov] from clienti equivale a:

SELECT prov from clienti

Se ho spazi nel nome del campo devo usare []

SELECT [Ragione Sociale] from clienti Questo comando sql darà errore:

SELECT Ragione Sociale from clienti

Inviato: 24/01/2017, 9:57

Inviato: 24/01/2017, 9:57

Inviato: 07/02/2017, 10:02

(2)

In openbase il delimitatore per il nome del campo è il codice ascii 96 (premere ALT e digitare assieme il numero 96 con il tastierino numerico)

SELECT `Ragione Sociale` FROM Clienti rinomina una colonna con la parola chiave AS SELECT prov as provincia from clienti

SELECT prov as [provincia di residenza] from clienti Se nell'interfaccia grafica in un campo metto

Matricola:NomeCampo => segue la rinomina della colonna da "NomeCampo" a Matricola per inserire + campi devo scriverli dopo la clausola SELECT separandoli con la ,

SELECT [ragione sociale], prov from clienti

SELECT [ragione sociale] as [Nome Ditta], prov as [provincia di residenza] from clienti

ORDER BY => clausola di ordinamento (corrisponde alla riga "Ordinamento" dell'interfaccia grafica delle Qry SELECT [ragione sociale], prov from clienti order by prov

Se devo ordinare per provincia e poi per ragione sociale basta elencare i campi coinvolti nell'ordinamento in sequenza separandoli con ,

SELECT [ragione sociale], prov from clienti order by prov, [ragione sociale]

scrivere

SELECT IdCliente, [Ragione Sociale], prov FROM Clienti ORDER BY prov, [Ragione Sociale]

è diverso da

SELECT IdCliente, [Ragione Sociale], prov FROM Clienti ORDER BY [Ragione Sociale], prov La priorità di ordinamento è dettata dall'ordine dei campi dopo la clausola order By

La direttiva DESC definisce un ordinamento decrescente (va inserito dopo il nome del campo associato).

La direttiva ASC definisce un ordinamento crescente (E' inutile essendo il comportamento predefinito).

In SQL nomi che non corrispondono al nome di un campo vengono trattati come se fossero variabili. Viene quindi richiesta una valorizzazione per tale nome sconosciuto e da quel momento in poi il valore digitato verrà usato all'interno della Qry.

La direttiva TOP n estra i primi n record risultanti dall'ordinamento indicato con ORDER BY. Se ci sono record a pari merito (con gli stessi valori nei campi indicati nell'order by) il nr di righe che appare all'orizzonte

potrebbe essere superiore!

27/1/2017 4T riprendere dai filtri operatori di relazione

< minore

>

<> diverso

=

>=

<=

A < B => le espressioni che utilizzano gli operatori di relazione restituiscono o vero o falso select * from studenti where eta>=18 => elenco degli studenti maggiorenni

WHERE Elenco di condizioni => restituisce le righe della tabella per cui l'insieme delle condizioni restituiscono

(3)

vero

Fatturato > 100 => solo i clienti con un fatturato > 100 verranno estratti poichè tale espressione con questi record restituisce TRUE

SELECT * FROM CLIENTI WHERE TRUE => mostro tutti i clienti - true è una costante che vale sempre vero per cui tutte le righe della tabella indicata in FROM verranno visualizzate.

condizione1 and condizione2 => vera solo quando condizione1 e condizione2 sono contemporaneamente vere, falsa altrimenti

condizione1 or condizione2 => falsa solo quando condizione1 e condizione2 sono contemporaneamente false, vera altrimenti

not condizione => vera se condizione è falsa e viceversa 4O 30/1/2017

riprendere da esempio 7 1+3*2

diverso (1+3)*2 1+3*2 equivale 1+(3*2)

SELECT * FROM CLIENTI WHERE (PROV=BS)

mi richiede di valorizzare BS poichè viene interpretato come se fosse un campo. Non esistendo BS nella struttura dati della taBELLA clienti ACCESS ne richiede la valorizzazione

SELECT * FROM CLIENTI WHERE (PROV="BS") funziona senza problemi. E' equivalente a:

SELECT * FROM CLIENTI WHERE (PROV='BS')

"BS" è una stringa (una costante caratterizzata da una sequenza di char ASCII

NOT A OR B AND C equivale a:

(NOT A) OR (B AND C)

poichè l'operatore unario ha precedenza su tutti gli altri operatori booleani (deve essere risolto per primo!) AND ha precedenza sull'or

V => vero =1 F => falso =0

TAVOLE DELLA VERITA' DEGLI OPERATORI LOGICI Not v => f

Not f => v f or f => f f or v => v v or f => v

(4)

v or v => v f and f => f f and v => f v and f => f v and v => v

NOT V or V and f => che valore ha (booleano) f or f => f (risolvo prima il not, poi and ed infine or NOT (V or V and f) => che valore ha (booleano)

NOT (V or f) (risolvo prima l'and , poi l'or ed infine il not Not V => F

le costanti di tipo data ora sono delimitate da #.

E' errato usare i doppi apici. Il mese va scritto prima del giorno del mese Esempio

#12/31/2017#

errato

"31/12/2017"!!!

4T 2/2/2017

"20/12/2017" esempio di rappresentazione di una data con una stringa 20122017 esempio di rappresentazione di una data con un nr intero

le date in ACCESS sono il nr di gg rispetto al 31/12/1899 vantaggi:

1) l'ordinamento numerico è compatibile con quello cronologico

data1 > daTA2 <=> nrggrispettoalladatadiriferimento(data1) > nrggrispettoalladatadiriferimento(data2) 2) oggi+1 => domani

oggi-1 => ieri

data1 - data2 => nr gg trascorsi tra le 2 date

ovvero la semantica degli operatori + e - è adatta anche a dati temporali

svantaggio => la data è illeggibile dal punto di vista umano. E' il sw che trasforma l'informazione illeggibile in una modalità umanamente comprensibile.

in openbase le date sono rappresentate come stringhe

"aaaa-mm-gg"

vantaggi

1) ordinamento cronologico e lessicografico (è la tabella ascii che determina il confronto) sono compatibili data1 > data2 <=> "aaaa1-mm1-gg1" > "aaaa2-mm2-gg2"

2) leggibilità del dato svantaggio

1) la semantica degli operatori + e - non è adatta alla rappresentazione dei dati temporali

"2015-12-31"+"1" => "2015-12-311" che non è domani

sarà il sw (openbase) a porre rimedio effettuando dei suoi calcoli interni

(5)

4/2/2017 - 4O riprendere esempio 1 date

Operatore di confronto usato solo per le stringhe. poichè in windows * indica "qualsiasi sequenza" seguono i seguenti esempi

campo like "A*" => tutti i record la cui proprietà "campo" inizia per A

campo like "*A*" => tutti i record la cui proprietà "campo" contiene la lettera A campo like "*A" => tutti i record la cui proprietà "campo" finisce per A

Elenco dei clienti che sono società in nome collettivo SELECT * FROM CLIENTI WHERE [ragione sociale] like "*snc"

Elenco delle società con ragione sociale che inizia con ROs SELECT * FROM CLIENTI WHERE [ragione sociale] like "Ros*"

Elenco delle società con ragione sociale che contiene ss SELECT * FROM CLIENTI WHERE [ragione sociale] like "*ss*"

Le ricerche in access non sono case sensitive

in tutti gli altri db l'* è sostituito con il carattere %

campo like "A%" => tutti i record la cui proprietà "campo" inizia per A

campo like "%A%" => tutti i record la cui proprietà "campo" contiene la lettera A campo like "%A" => tutti i record la cui proprietà "campo" finisce per A

11/2/2016 - 4Q - 2 MODULO

da e01692

ESEMPI DI QUERY PARAMETRICHE

SELECT * from clienti where [ragione sociale]=xx

il suo comportamento è il seguente: xx non è un campo per cui access tenta di valorizzarlo mostrando una richiesta intitolata con xx. L'utente che non sa il significato di xx rimane chiaramente interdetto.

SELECT * from clienti where [ragione sociale]=[dammi la ragione sociale]

la finestra che appare rende evidente la richiesta per cui l'utente può inserire il dato richiesto con cognizione di causa. Sfruttando questo particolare comportamento di access possiamo costruire delle qry che mostrano un risultato # a seconda dell'input dell'utente.

ATTENZIONE:

SELECT * from clienti where [ragione sociale]="dammi la ragione sociale"

questa non è una qry parametrica poichè "dammi la ragione sociale" è una stringa (mostrerà eventualmente una società [se esiste!] la cui ragione sociale è: "dammi la ragione sociale")

Esempi di qry parametriche:

SELECT * FROM Clienti

WHERE ([Ragione Sociale] like [dammi la lettera iniziale] & "*");

SELECT * FROM Clienti

WHERE ([Ragione Sociale] like "*" & [dammi la lettera finale]);

Inviato: 11/02/2017, 11:00

(6)

SELECT * FROM Clienti

WHERE ([Ragione Sociale] like "*" & [dammi la lettera contenuta] & "*");

vi ricordo che & è l'operatore di concatenazione

"Marco " & "Bianchi" => "Marco Bianchi"

Ricerca per ragione sociale contenente una determinata stringa digitata all'interno di una opportuna finestra di dialogo.

SELECT * FROM Clienti

WHERE ([Ragione Sociale] like "*" & [dammi parte della ragione sociale] &

"*");

3/2/2017 4T

riprendere esempio 14

Esempio: elenca tutti i clienti mettendo in un'unica colonna i 2 campi Rag.Soc e Provincia

SELECT [ragione sociale] & " - " & prov as [riferimento cliente]

FROM clienti

data di nascita dello studente + vecchio select min([natoil]) from studenti data di nascita dello studente + giovane select max([natoil]) from studenti fatturato medio:

SELECT avg(fatturato) as [media fatturato]

FROM clienti fatturato totale

SELECT sum(fatturato) as [fatturato totale]

FROM clienti

la varianza è una misura statistica che esprime la variabilità di un fenomeno. Più è elevata la varianza maggiori sono le oscillazioni.

Più è bassa + il comportamento è prevedibile

la Varianza è +/- è la media delle distanze dei valori osservati rispetto alla loro media.

GROUP BY => elimina le istanze duplicate

Esempio: province che hanno almeno un cliente (senza duplicati) SELECT prov

FROM clienti group by prov

(7)

Estraggo il nr di clienti per provincia SELECT prov, count(*) as nr

FROM clienti group by prov

4O - 6/2/2017 - riprendere dalle qry di raggruppamento SELECT sum(fatturato) as [totale fatturato] from clienti where prov<>"bs"

select classi from studenti group by classe where idprofe=111

elenco le classi del profe che ha matricola 111

distribuzione dei clienti per provincia

SELECT prov, count(*) as nr from clienti group by prov nr di studenti per classe

select classi, count(*) as nr from studenti group by classe

media comportamento per classe

select classi, avg(comportamento) as [media voto di comportamento]

from studenti group by classe 4T 09/02/2017

ripetere differenza tra having e where

Mostro il codice ascii della prima lettera di quel campo SELECT Asc(nominativo) , nominativo

FROM alunni;

mid(Campo,1,1) => estraggo il primo char del campo passato come argomento mid(Campo,len(Campo),1) => estraggo l'ultimo char del campo passato come argomento

mid(Campo,i,1) => estraggo l'i-esimo char del campo passato come argomento

mid(Campo,3) => estraggo la sottostringa ottenuta omettendo i primi 2 char (dal terzo in poi)

Assegnato eser 2.1.A (escluso elemento i) 4T 10/2/2017 (proseguire da instr)

se la matricola contiene l'id della scuola nei primi 3 char della

matricola avremo che l'elenco degli studenti del leonardo è ottenibile in questo modo:

SELECT * FROM ALUNNI WHERE matricola like "LEO*"

oppure

SELECT * FROM ALUNNI WHERE left(matricola,3)="LEO"

(8)

Per estrarre tutte le società per azioni

SELECT * FROM Clienti WHERE RagSoc like "*SPA"

oppure

SELECT * FROM Clienti WHERE Right(RagSoc,3)="SPA"

mid("17/12/2017",4,2) =>12

Sintassi INSTR => INSTR(frase,cosacerco) => semantica => restituisce la posizione della 1° occorrenza di cosacerco in frase. Se non trova restituisce zero

Esempio

instr("Arrivederci","i") => 4 instr("Arrivederci","I") => 4 instr("Arrivederci","x") => 0

Sintassi INSTRREV => INSTRREV(frase,cosacerco) => semantica =>

restituisce la posizione dell'ultima occorrenza di cosacerco in frase Esempio

instrrev("Arrivederci","i") => 11

14/2/2017 - 4Q - 2 MODULO

da e01692

Mostrare l'esempio escluso la 4Q --- esempio con + statistiche

SELECT min(fatturato) as [minimo incassi], max(fatturato) as [massimo incassi], avg(fatturato) as media

FROM clienti

---

ricerca tutti i clienti che nella rag.soc. contengono la sottostringa SPA select * FROM CLIENTI WHERE [Ragione Sociale] like "*SPA*"

equivalente a:

select * FROM CLIENTI WHERE Instr([Ragione Sociale],"SPA")<>0

Con questa istruzione restituisce la posizione dello spazio instr("Sechi Marco"," ")

quindi questa istruzione

left("Sechi Marco",instr("Sechi Marco"," ")-1) estrae il cognome

In generale se ho un campo nominativo (cognome+spazio+nome) posso estrarre il cognome in questo modo (il -1 serve per escludere lo spazio!) left(Nominativo,instr(Nominativo," ")-1)

i nomi dei files sono i loro percorsi assoluti (parto dall'unità logica ed arrivo al nome finale del file preceduto da tutte le cartelle intermedie che devo attraversare per giungere a destinazione).

C:\app.sechi\Appunti2016\2MODULO\pluto.png

Inviato: 14/02/2017, 10:02

(9)

C:\app.sechi\Appunti2016\1MODULO\pluto.png

Vediamo come estrarre il nome ridotto del file e la cartella che lo contiene

Posizione ultimo \:

instrrev("C:\app.sechi\Appunti2016\2MODULO\pluto.png","\") Percorso della cartella che contiene il file:

left(Percorso,InstrRev(Percorso,"\")-1) ed ottengo

C:\app.sechi\Appunti2016\2MODULO

Per quanto riguarda il nome del file ridotto come nel nome del campo nominativo avrò:

mid(Percorso,InstrRev(Percorso,"\")+1)

Rendo maiuscola la prima lettera, minuscola tutte le altre Ucase(left(Nome,1)) + lcase(mid(Nome,2))

equivale a:

Ucase(left(Nome,1)) & lcase(mid(Nome,2))

space => usato nei formati a larghezza fissa utilizzato per lo scambio di dati tra 2 sistemi

space(5) è equivalente a: string(5," ")

replace(classe,"4Q","5Q") nr di A presenti in Cognome

Nr char originali meno il nr di char senza la lettera A len(Cognome)-len(replace(cognome,"A",""))

Le funzioni di conversione (clng, cdbl, cdate, cstr) rendono esplicito il tipo da utilizzare da parte dell'interprete del linguaggio

Nel caso di numeri con decimali arrotonda clng(1.34) => 1

clng(1.7) => 2 clng("1.7") => 2

4O 13/2/2017 ---

riprendere da fix 1+3=4

"1"+"3"="13"

Nr di studenti per giorno della settimana di nascita

SELECT format(DataDiNascita,"dddd") as [giorno settimana], count(*) from

(10)

alunni group by format(DataDiNascita,"dddd") esempio:

SELECT format(date(),"y") => mostra il nr di gg dal 1/1 dell'anno corrente

17/2/2017 - 4Q - 2 MODULO

da e01692

riprendere dal formato delle ore

format(now(),"dddd, d mmmm yyyy \o\r\e hh.nn.ss") venerdì, 17 febbraio 2017 ore 08.21.44

format(now(),"dddd, d mmmm yyyy ""ore"" hh.nn.ss")

Il " è il limitatore relativo alle stringhe. Se in una stringa inserisco un "" indico che non deve essere interpretato come termine della stringa ma come un doppio apice.

Esempio se scrivo

"Nave ""BS""" => mostrerà Nave "BS"

"""" => mostrerà " (il primo " => inizio stringa - "" => doppio apice "

- Ultimo " => fine stringa) se scrivo

"Nave "BS" => mostrerà un errore => il " davanti a BS viene interpretato come fine stringa

FORMATi per i numeri

SELECT format(idcliente,"0000") as ID, Format(fatturato,"€ #,##0.00") AS [Fatturato in euro]

FROM clienti;

Separatore delle migliaia e della parte decimale invertito

ATTENZIONE => format restituisce una stringa. Quindi gli eventuali simboli che vengono visualizzati sono realmente presenti contrariamente alla maschera di formato applicata ai campi (vista nel 1 modulo) che fornisce solo un effetto visivo e non modifica assolutamente i contenuti.

format(1000.014,"#,##0.00 \L\i\r\e") oppure

format(1000.014,"#,##0.00 ""Lire""")

format(100,"00000") => "00100"

Inviato: 17/02/2017, 7:57

(11)

questo tipo di format è usato per garantire compatibilità tra ordinamento numerico e lessicografico

"123" < "9"

ma

"00123">"00009"

format("ciao",">") equivale a Ucase("ciao") format("CIAO","<") equivale a Lcase("CIAO")

format(Stringa,STRING(N,"@")) => Crea una stringa di n char inserendo all'inizio della stringa N-len(stringa) spazi

format(Stringa,"!" & STRING(N,"@")) => Crea una stringa di n char inserendo alla fine della stringa N-len(stringa) spazi

format("Ciao","@@@@@@") => " Ciao"

format("Ciao","!@@@@@@") => "Ciao "

format("Ciao","@@@@@@") equivale a space(len("@@@@@@")-len("Ciao")) & "Ciao"

format("Ciao","!@@@@@@") equivale a

"Ciao" & space(len("@@@@@@")-len("Ciao"))

Funzione IIF

simile al SE di Excel

iif(condizione,rispostaseCondizioneVERA,rispostaseCondizioneFALSA) esempio

SELECT iif(fatturato<1000,"Cliente loffe","Cliente che merita!") FROM clienti;

Nz(arg,rispostasenullo) equivale a:

iif(isnull(arg),rispostasenullo,arg)

Null è il valore di una variabile che non è stata mai valorizzata. Lo vedremo nelle qry multitabella.

Le funzioni che iniziano con IS sono di test e vengono solitamente usate nella IIF o nella clausola WHERE

isnull(null)

Media dei voti complessiva se nel campo voti inserisco anche simboli non numerici (esempio + => bonus , - penalty, * esercit. controllata etc...).

chiaramente il campo VOTO è testuale e contiene numeri solo se si tratta

(12)

di una verifica vera e propria.

SELECT AVG(Voto) From Interrogazioni where isnumeric(voto)

18/2/2017 - 4Q - 2 MODULO

da e01692

riprendere dalle funzioni di tipo cronologico select * from alunni where year(NatoIl)=2017 oppure

select * from alunni where natoIl>#12/31/2016 AND natoIl<=#12/31/2017 Nati ultimo gg del mese

SELECT * FROM Studenti WHERE Month(NatoIl)<>Month(NatoIl+1)

Nati il 29/2 di un qualsiasi anno

SELECT * FROM Studenti WHERE Month(NatoIl)=2 AND DAY(NatoIl)=29 SELECT * FROM Studenti WHERE format(NatoIl,"ddmm")="2902"

Studenti nati di domenica

SELECT * FROM Studenti WHERE Weekday(NatoIl)=1 oppure

SELECT * FROM Studenti WHERE format(NatoIl,"w")="1"

oppure (non valida in versioni di Access non italiche)

SELECT * FROM Studenti WHERE format(NatoIl,"dddd")="domenica"

nr di secondi trascorsi/mancanti alla fine/inizio gg trascorsi

hour(now())*60*60+minute(now())*60+second(now()) mancanti

24*60*60 -(hour(now())*60*60+minute(now())*60+second(now()))

Query multitabella

Se un campo della query appare con lo stesso nome in + tabelle elencate nel from allora devo mettere davanti al nome del campo "Nometabella."

(risolvo quindi possibili incomprensioni dell'interprete SQL) DIRECT JOIN

Le relazioni 1-N implementano una proprietà multipla della tabella master Quando devo verificare chi possiede una caratteristica implementata nella tabella slave B devo seguire questo modello:

SELECT A.*, B.*

FROM A,B

WHERE A.idMaster=B.idMaster

Nominativo degli studenti con almeno una assenza:

SELECT Nominativo FROM Studenti, Assenze

where Studenti.id=Assenze.idStudente Group by Nominativo

Questo tipo di query nota come direct (o inner) join mostrerà al massimo

Inviato: 18/02/2017, 11:01

(13)

N righe dove N è la cardinalità della tabella slave.

Ogni record master che ha m record associati in B apparirà m volte nell'esecuzione della query

21/2/2017: 4Q - 2 MODULO

da e01692

LEFT JOIN

Quando devo verificare chi non possiede una caratteristica implementata nella tabella slave B devo seguire questo modello:

SELECT A.*, B.*

FROM A LEFT JOIN B ON A.idMaster=B.idMaster

per estrarre chi non possiede una determinata proprietà (implementata nella tabella slave)

SELECT A.*, B.*

FROM A LEFT JOIN B ON A.idMaster=B.idMaster where B.idMaster is null oppure

SELECT A.*, B.*

FROM A LEFT JOIN B ON A.idMaster=B.idMaster where isnull(B.idMaster)

Nominativo degli studenti con nessuna assenza:

SELECT Nominativo

FROM Studenti left join Assenze on Studenti.id=Assenze.idStudente Where IsNull(Assenze.idStudente)

Media voti di ogni studente con almeno un voto SELECT NOminativo, AVG(voto) as MediaVoti FROM studenti,verifiche

WHERE studenti.id=verifiche.idstudente GROUP BY Nominativo

Elenco fatturato per ogni cliente (anche chi non ha acquisti) SELECT [ragionesociale],sum(nz(importo,0)) as fatturato from clienti left join testatefatture

on clienti.idcliente=testatefatture.idcliente group by [ragionesociale]

Vi ricordo che la LEFT JOIN estrae tutti i record della tabella master e solo i record collegati della tabella slave!

Inviato: 21/02/2017, 10:02

(14)

DOMANDA: conteggio fatture per ogni cliente (anche chi non ha fatto acquisti). Il risultato che ottengo con questa qry è errato

SELECT [ragionesociale],count(*) as nrfatture from clienti left join testatefatture

on clienti.idcliente=testatefatture.idcliente group by [ragionesociale]

poichè la società F.lli Bandiera, che non ha fatto alcun acquisto, appare con un 1 in sua corrispondenza.

la soluzione corretta è la seguente:

SELECT [ragionesociale],sum(iif(isnull(testatefatture.idcliente),0,1)) as nrfatture

from clienti left join testatefatture

on clienti.idcliente=testatefatture.idcliente group by [ragionesociale]

sommo 0 se il campo della tabella slave è nullo (quindi non ho un record slave corrispondente!) altrimenti 1 (e quindi equivale al conteggio)

24/2/2017 - 4Q - 2 MODULO

da e01692

schemi LEFT JOIN e DIRECT JOIN 24/2/2017 4T

riprendere dalla nojoin

Estrae tutte le coppie possibili tra i record A e B appartenenti alle 2 tabelle indicate nel from

Se N è la cardinalità della tabella A e M è la cardinalità della tabella B il massimo numero di righe che verranno estratte è NxM

SELECT A.*, B.* FROM A, B righe con

campi di A - campi di B

1 record di A viene abbinato a tutti gli M record di B (M repliche di A) 2 record di A viene abbinato a tutti gli M record di B (M repliche di A) ...

N record di A viene abbinato a tutti gli M record di B (M repliche di A) quindi NxM righe

Le nojoin permettono l'estrazione di tutte le combinazioni di coppie di record prese dalle 2 tabelle

Inviato: 25/02/2017, 10:59

(15)

DOMANDA SULLE QRY DI CREAZIONE:

esempio

creami una tabella studenti con matricola (numerico) - Nominativo (testo di 30 caratteri) - foto (ole) e Osservazioni (MEMO)

1) Identificare il campo chiave come nel 1° modulo e mettere il constraint NomeVincolo Primary Key

2) Identificare il campo significativo come nel 1° modulo e mettere obbligario l'inserimento con constraint NomeVincolo not null

i restanti campi vanno creati seguendo le regole di naming viste in testa agli appunti.

create index => consente di creare un indice quando la tabella esiste ed è popolata da record (la create table mi elimina l'intero contenuto!) IGNORE NULL => negli indici usare questa clausola consente di indicizzare solo gli elementi valorizzati (quindi essendo il set di record inferiore sono + veloce nell'estrazione dei dati).

4/3/2017 - 4Q - 2 MODULO

da e01692

riprendere da QUERY DI MANIPOLAZIONE DEI DATI

le query di creazione tabella da selezione (INTO NOMETABELLA) vengono usate per riversare dati prodotti da una query di selezione all'interno di una tabella transitoria che poi viene usata successivamente in ulteriori query

Le query di accodamento riversano nella tabella indicata dopo "INSERT INTO" i dati prodotti dalla query di selezione scritta dopo.

In questo caso la tabella di destinazione deve esistere

Le qry di accodamento sono utili ad esempio all'inizio dell'anno per aggiungere i nuovi iscritti.

INSERT INTO traduzione ( ita, uk ) SELECT Vocabolario.ita, Vocabolario.uk

INSERT INTO traduzione ( ita, uk ) VALUES ("Barca","boat")

DOMANDA : inserire il tuo nominativo all'interno della tabella studenti con la data di nascita:

Inviato: 04/03/2017, 11:15

(16)

RISPOSTA

INSERT INTO Alunni (Cognome, Nome, NatoIl) VALUES ("Rossi", "Mario",", #12/31/2010#) FROM Vocabolario

where ita like "h*"

Comandi di eliminazione. Utili per gli studenti di quinta promossi che se ne vanno

DELETE FROM traduzione where ita like "h*"

4T 3/3/2017

DOMANDA => rincara del 10% tutti i prodotti alimentari UPDATE PRODOTTI

SET Prezzo=Prezzo*1.1 WHERE genere="alimentari"

UPDATE Studenti SET classe="5Q"

WHERE classe="4Q" AND Promosso

con UNION ALL i risultati delle n query vengono uniti (accodati) senza ricercare eventuali valori duplicati e quindi sono molto veloci

con UNION senza ALL i risultati delle n query vengono uniti (fusi) eliminando eventuali valori duplicati (richiede quindi una ricerca!!!) e quindi sono molto lente

DIrect JOIN

SELECT TabellaA.* FROM TabellaA,TabellaB WHERE TabellaA.IDA =TabellaB.IDA

GROUP BY TabellaA.*

con le sottoquery diventa

SELECT TabellaA.* FROM TabellaA

WHERE TabellaA.IDA IN (SELECT TabellaB.IDA FROM TabellaB)

Left JOIN

SELECT TabellaA.* FROM TabellaA LEFT JOIN TabellaB ON TabellaA.IDA =TabellaB.IDA

WHERE TabellaB.IDA is null

con le sottoquery diventa

SELECT TabellaA.* FROM TabellaA

WHERE TabellaA.IDA NOT IN (SELECT TabellaB.IDA FROM TabellaB)

7/3/2017 - 4Q - 2 MODULO

(17)

da e01692

Query FULLTEXT => sono usate dai motori di ricerca. La ricerca avviene in modo trasversale in tutti i campi della tabella.le ricerche fulltext

necessitano di indici particolari che permettono la ricerca contemporanea su + campi.

Access non gestisce in modo nativo le query fulltext ma è necessario effettuare la ricerca campo per campo.

Esempio:

SELECT * FROM Vocabolario WHERE

(Italiana Like "*AGENT*") OR (Spagnolo Like "*AGENT*") OR (Tedesco Like "*AGENT*") OR (Inglese Like "*AGENT*") OR (Olandese Like "*AGENT*") OR (Francese Like "*AGENT*")

Le query fulltext in access sono quindi sequenziali e pertanto molto lente

le query incrociate mettono in relazione 2 grandezze.

Esempio Righe studenti, colonne materie, incrocio => media voti

Esempio Righe prodotti, colonne regioni, incrocio => fatturato per quella regione relativo a quel prodotto

Esempio Righe patologie, colonne quartieri, incrocio => conteggio relativo a quella patologia per quel quartiere

4O - 7/3/2017

formato files => modalità di salvataggio dell'informazione utilizzata da un particolare prg

formato nativo => formato predefinito di salvataggio di una particolare applicazione

importazione => consente l'acquisizione di documenti da parte di prg che non hanno un determinato formato tra quelli nativi.

Formato portabile => leggibile da qualsiasi sistema

formato chiuso => modalità di salvataggio dei dati i cui dettagli tecnologici non vengono resi disponibili o sono soggetti a brevetti.

Per importare un documento scritto con un formato chiuso devo ricorrere a tools di importazione venduti solitamente da chi ha inventato quel

Inviato: 07/03/2017, 9:58

(18)

particolare formato

formato aperti => modalità di salvataggio dei dati i cui dettagli

tecnologici vengono resi disponibili a tutti. Chiunque abbia il know how adatto può produrre dei tools di importazione per tali formati.

file testuali => file il cui contenuto è interpretato come sequenza di byte interpretati secondo la codifica ascii. I files prodotti da Notepad sono file testuali. In altre parole del testo privo di caratterizzazioni tipografiche

un file è binario se non è testuale. I files di Word non sono testuali (all'interno vi sono specifice relative alla dimensione della pagina, margini, font etc.)

modulo di esportazione => trasforma il formato nativo di un sistema informativo in un file portabile

modulo di importazione => trasforma il formato portabile nel formato nativo riconosciuto da un sistema informativo

arrivato al tabtext compreso

11/3/2017 - 4Q - 2 MODULO

da e01692

BMP => è un formato non compresso

Prerogative IMG GIF max 256 colori

usa compressione non distruttiva supporta la trasparenza

supporta le animazioni

le img possono essere interlacciate

il nr di colori basso lo rende poco adatto alle img fotografiche.

E' adatto per clipart (immagini a fumetto)

la compressione non distruttiva consente di ottenere un file identico

(come qualità) a quello in BMP ma con una dimensione in byte decisamente + contenuta.

spiegato interlacciamento - quando è utile ? come funziona ? esempi di compressione non distruttiva

Inviato: 11/03/2017, 10:00

(19)

compressione RLE:

FILE ORIGINALE:

aaaaabbbbhhaaaaaaaaa => 20 char FILE Compresso:

^5a^4bhh^9a => 11 char => ho diminuito la dimensione mantenendo lo stesso contenuto.

Ogni singola sequenza ripetuta dello stesso simbolo viene sostituita con un carattere speciale (esempio ^) + nr di occorrenze + simbolo che devo ripetere

compressione HUFFMAN:

100.000 pixel con 4 possibili tonalità 00 NERO

01 BIANCO 10 ROSSO 11 VERDE

non compresso occupa 200.000 bit

supponiamo che il rosso sia l'80% dei pixel

cambio la codifica. Al colore > associo un solo bit 1 ROSSO

000 NERO 001 BIANCO 011 VERDE

il bit iniziale permette all'algoritmo di intuire quale rappresentazione usare. Quindi la sequenza.

100000101110011 viene letta:

1 000 001 011 1 001 1

Inrterlacciato => modalità che crea l'immagine in modo non sequenziale (dalla 1° all'ultima riga dell'immagine) ma inviando al client una riga ogni N righe. In questo modo il contenuto dell'img può essere

interpretato meglio fin da principio.

Gli 80.000 pixel rossi richiedono un solo bit mentre i restanti 20000 (altri colori) ne richiedono 3. Pertanto:

80000+3*20000 =140.000

Prerogative IMG JPG

1) compressione distruttiva (tasso di compressione molto elevato) 2) palette personalizzabile (quindi adatta alle foto)

Compressione distruttiva => si basa sull'incapacità umana di rilevare lievi variazioni di colore (idem nell'mp3 dove si sfrutta l'incapacità dell'udito di rilevare determinate frequenze audio).

(20)

Un'img compressa in JPG ha una qualità inferiore a quella bmp di partenza ma una dimensione enormemente ridotta.

il JPG non è adatto alle img al tratto (clipart o fumettO) poichè la continua sostituzione dei colori in tonalità equivalenti rende 'immagine loffe! Il JPG è usato nelle img fotografiche.

La compressione GIF sfrutta o la riduzione del nr di colori o la ripetitività di un colore all'interno dell'img. Quindi un img con tanti colori e elevata variabilità in GIF non fornirà mai un elevato tasso di compressione

PNG => evoluzione del GIF. Supporta internamente del testo per cui posso effettuare nelle img delle ricerche. Il png nella modalità standard non supporta le animazioni ed arriva a 32 bit di profondità di colore.

Prerogative PNG

>> PNG => usa una compressione non distruttiva

>> Profondità di colore => fino a 32 bit (usabile in fotografia ma non ha la medesima potenza del JPG in termini di compressione

>> Supporta internamente del testo per cui posso effettuare nelle img delle ricerche.

>> png non è soggetto a brevetti (il gif li aveva ma ora sono scaduti)

>> supporta la trasparenza

ALGORITMI DI COMPRESSIONE NON DISTRUTTIVA => usano un cambio di codifica per ridurre le dimensioni

ALGORITMI DI COMPRESSIONE DISTRUTTIVA => usano limiti sensoriali umani per ridurre le dimensioni

3T 9/3/2017

TIFF => formato usato per la stampa(quindi le img sono di qualità!) 1) usa un algoritmo di compressione non distruttivo LZW

2) supporta le multipagina

Fino ad adesso abbiamo analizzato img bitmap (mappe di pixel) IMMAGINI VETTORIALI

Le img sono descritte mediante primitive geometriche (esempio un cerchio rosso come coordinate del centro + raggio).

VANTAGGI

1) se le img che devo descrivere sono semplici posso descriverle con

(21)

poche primitive => file di piccole dimensioni

2) la qualità è sempre la migliore indipendentemente dalla device che uso (avendo delle funzioni matematiche mi basta effettuare un ricalcolo per ottenere la massima qualità rispetto alla risoluzione della periferica usata)

SVANTAGGI

1) se l'img è complessa il nr di primitive da utilizzare è altissimo =>

file con dimensione > rispetto al corrispondente BMP

Il formato raw è un formato intermedio usato in fotografia che unisce le 2 modalità BMP e Vettoriale

11/3/2017 4Q - 2 MODULO

da e01692

Spiegato tracciato file in fixed format.

xlsx e accdb sono formati binari (solitamente i binari non sono

portabili!). La loro ampia diffusione permette di utilizzare tali formati come formati di interscambio.

Nelle stampanti il driver rappresenta il traduttore tra il set di comandi generici di SO che pilotano una stampante virtuale e il set di comandi reali della stampante effettivamente installata.

Nelle database l'ODBC rappresenta il traduttore tra un set di comandi generici di SO che pilotano un database virtuale e il set di comandi reali usati dal DB effettivamente installato.

4Q 11/3/2016

Quando uso i formati di interscambio:

1) per travasare i dati da un db ad un altro per effettuare un'analisi dei dati.

2) per registrare in un unico contenitore dati che vengono prodotti da # postazioni utente

QUANDO USO L'IMPORTAZIONE:

1) poichè i dati sono posti in strutture reali di access posso sfruttare

Inviato: 11/03/2017, 11:01

(22)

tutte le funzionalità offerte da un DB (tipizzazione dei dati =>

ordinamenti corretti, indici => ricerche veloci)

2) essendo all'interno di un file di access eventuali modifiche apportate dal sistema sorgente (quello che ha prodotto il file di interscambio) non vengono recepite all'interno della tabella importata se non reimportando i dati

=> utile quindi quando devo effettuare query pesanti che fanno grosso uso di indici e non è importante avere i dati aggiornati fino all'ultimo

istante

QUANDO USO IL COLLEGAMENTO:

1) poichè i dati non sono posti in strutture reali di access non posso sfruttare tutte le funzionalità offerte da un DB (tipizzazione dei dati

=> ordinamenti corretti, indici => ricerche veloci) e pertanto le query saranno molto lente

2) essendo all'esterno di un file di access eventuali modifiche apportate dal sistema sorgente (quello che ha prodotto il file di interscambio) vengono recepite immediatamente da access

=> utile quindi quando devo avere dati sempre aggiornati .

Per importare i dati di una tabella collegata si usano solitamente le query di creazione da selezione o di accodamento

Mostrato il collegamento con i files binari

La freccia in parte all'icona indica che si tratta di una tabella collegata.

14/3/2017 - 4Q - 2 MODULO

da e01692

Collegare una tabella di access risulta utile perchè ?

1) consente di mantenere aggiornati i dati quando la componente prg viene aggiornata con nuove funzionalità.

2) per connettere un db condiviso tra + utenti al client che contiene solo la componente prg (slide 13 di "Formato file")

DB SERVER

Non hanno componenti per costruire l'interfaccia applicativa.

Il frontend (interfaccia utente) dei DB server fornisce strumenti per la definizione degli archivi, ottimizzazione degli indici e funzioni di

Inviato: 14/03/2017, 10:04

(23)

Tutti gli orari sono UTC Pagina 1 di 1

ricerca mediante SQL).

I db server consentono la definizione di policies (diritti di accesso) a livello utente (esempio il docente può consultare e modificare i voti, lo studente solo leggerli).

cosa significa il mappamondo all'interno delle tabelle ? si tratta di una tabella di un db server connessa mediante ODBC. Qualsiasi operazione svolta su tale tabella verrà immediatamente aggiornata sul DB server.

14/3/2017 - 4Q - 2 MODULO

da e01692

Collegare una tabella di access risulta utile perchè ?

1) consente di mantenere aggiornati i dati quando la componente prg viene aggiornata con nuove funzionalità.

2) per connettere un db condiviso tra + utenti al client che contiene solo la componente prg (slide 13 di "Formato file")

DB SERVER

Non hanno componenti per costruire l'interfaccia applicativa.

Il frontend (interfaccia utente) dei DB server fornisce strumenti per la definizione degli archivi, ottimizzazione degli indici e funzioni di ricerca mediante SQL).

I db server consentono la definizione di policies (diritti di accesso) a livello utente (esempio il docente può consultare e modificare i voti, lo studente solo leggerli).

cosa significa il mappamondo all'interno delle tabelle ? si tratta di una tabella di un db server connessa mediante ODBC. Qualsiasi operazione svolta su tale tabella verrà immediatamente aggiornata sul DB server.

Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/

Inviato: 14/03/2017, 10:04

Riferimenti

Documenti correlati

&lt;oggetto&gt;IMPEGNO DI SPESA PER ATTIVITA' CORRELATE ALLO SVOLGIMENTO DELLE ELEZIONI AMMINISTRATIVE 05/06/2016&lt;/oggetto&gt;. &lt;sceltaContraente&gt;23-AFFIDAMENTO IN ECONOMIA

LIMITI NOTEVOLI per SUCCESSIONI

First and second fundamental theorems are given for polynomial invariants of a class of pseudo-reflection groups (including the Weyl groups of type B n ), under the assumption that

Gli aspetti più importanti della progettazione di una pagina che si possono trattare con l'uso di tabelle sono:.. z la divisione della pagina in

[r]

[r]

H eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee W8eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeAf U8 6HI eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeW... g7

[r]