Il 0% ha trovato utile questo documento (0 voti)
0 visualizzazioni

SQL_TipiDato

Caricato da

sandudavidalex
Copyright
© © All Rights Reserved
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
0 visualizzazioni

SQL_TipiDato

Caricato da

sandudavidalex
Copyright
© © All Rights Reserved
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 17

Il linguaggio SQL

Introduzione e tipi di dato


[email protected]
Principali Tipi di dato SQL
• Alla base del modello relazionale vi sono le tabelle
con i relativi attributi. Ogni attributo appartiene ad
un dominio che deve essere ben definito
• Al fine di definire i domini degli attributi per la creazione di
tabelle (gli elementi che vengono manipolati dall’ SQL
appartengono tutti ad un tipo di dato e questo deve essere
dichiarato) e per la loro interrogazione, SQL definisce vari
tipi di dato
• Un tipo di dato è costituito:
• da un insieme di valori
• da un insieme di operazioni definite sul tipo
Tipi di dato
• I Tipi di Dato o (Domini) possono essere classificati
in:
• Tipi di dato predefiniti
• Numerici
• Esatti: rappresentano valori interi e valori decimali in virgola fissa
(es. 75,4.5,-4.6...)
• Approssimati: rappresentano valori reali in virgola mobile
• Carattere (singoli caratteri o stringhe, anche di lunghezza
variabile)
• Temporali
• Bit (singoli booleani o stringhe)
• Booleani (introdotti in SQL3)
• Tipi di dato definiti dall’utente a partire dai domini
elementari
Tipi numerici esatti
• Questa famiglia contiene i domini numerici che permettono di
rappresentare valori numerici esatti, es. numeri interi o numeri
con parte decimale di lunghezza prefissata (e.g. valori monetari)
• NUMERIC(precisione, scala) : rappresenta i valori decimali (interi o
decimali, positivi e negativi):
• Precisione è il numero totale di cifre (>=0)
• Scala (>0 e <precisione) è il numero di cifre alla destra del separatore decimale
• Sia dimensione che precisione sono parametri facoltativi: se non vengono
esplicitate, sono impostati automaticamente (scala=0 di default)
• DECIMAL(precisione, scala) abbr DEC: identico a NUMERIC, con l’unica
differenza che la precisione rappresenta il valore minimo con cui poi I
numeri verranno memorizzati
• La precisione massima per entrambi dipende dall’implementazione. Quella dei
decimal >= numeric (possono essere sinonimi)

• BIGINT : Rappresenta i valori interi (senza cifre decimali).


• INTEGER abbr INT: Rappresenta i valori interi (senza cifre decimali).
Non è possibile dimensionarlo (cioè specificarne la lunghezza in byte).
• SMALLINT: Rappresenta i valori interi. I valori di questo tipo sono usati
per eventuali ottimizzazioni poichè richiedono minore spazio di
memorizzazione.
• (possono essere sinonimi)
esempi
• In mysql il separatore è il .
• In mysql decimal e numeric sono sinomini
• Nel senso di Numeric (la precisione non può essere aumentata)

• considerato il tipo decimal(4,2)


• 100 non appartiene al tipo
• -2.2 appartiene al tipo
• 22 appartiene al tipo
• 22.122 viene approssimato a 22.12 (approssimazione all’intero più vicino)

• Considerato il tipo decimal(3)


• Equivale a decimal(3,0)
• 1000 non appartiene al tipo
• -23 appartiene al tipo
• -998.8 viene approssimato a -999
esempi
• In MYSQL
• INT sono i numeri rappresentati in C2 su 32 bit
• SMALLINT sono i numeri rappresentati in C2 su 16 bit
• BIGINT sono i numeri rappresentati in C2 su 64 bit

• Quali sono i valori ammessi?


Tipi numerici approssimati
• Per le grandezze reali approssimate invece (es.
grandezze fisiche) SQL definisce:
• REAL: rappresenta valori a singola precisione in virgola
mobile. La precisione dipende dalla specifica
implementazione di SQL.
• DOUBLE PRECISION o DOUBLE: rappresenta valori a
doppia precisione in virgola mobile. La precisione
dipende dalla specifica implementazione di SQL.
• FLOAT: permette di richiedere la precisione che si
desidera (il parametro p indica il numero di cifre da
rappresentare per la mantissa). Il formato è FLOAT(p).
Tipi numerici approssimati
• In mysql REAL e DOUBLE sono sinonimi
• Implementazione non standard

• FLOAT sono rappresentati su 32 bit


• DOUBLE sono rappresentati su 64 bit
• FLOAT(P) ha una implementazione non standard
• Sceglie fra 32 e 64 bit e non la dimensione

• Numeri validi:
• -0.1E-1 (-0.01)
• 9
• 9.322
Tipi caratteri
• SQL definisce diversi tipi carattere utilizzati per
rappresentare stringhe (sequenze) di caratteri (inclusa la
rappresentazione a carattere di un numero)
• Assegnare un valore più lungo della lunghezza specificata
nella definizione del tipo di dato costituisce un errore a
tempo di esecuzione (run time error)
• La sintassi per la definizione è:
• tipo_di_dato(dimensione)
• esempio: CHAR, CHAR(100),
• in alcuni casi è obbligatorio indicare la dimensione
• se non si indica, viene assunto un valore di default
Tipi carattere
• CHARACTER (abbreviato CHAR): permette di definire
stringhe di caratteri di lunghezza fissata n. La specifica è
della forma CHAR(n).
• la dimensione massima è 2000 (255 in MYSQL)
• la dimensione minima e di default è1
• Essendo una lunghezza fissa, nel caso che venga inserita una stringa
di m caratteri (dove m è minore di n), il DBMS aggiunge in coda alla
stessa n-m caratteri ‘ ‘ (spazio) in modo da raggiungere la lunghezza
massima dichiarata.
• CHARACTER VARYING (abbreviato VARCHAR): permette di
definire stringhe di caratteri a lunghezza variabile con
lunghezza massima predefinita n. La specifica è della forma
VARCHAR(n).
• la dimensione è obbligatoria e va da 1 a 4000 (65536 in mysql)
• se si immette un dato di lunghezza inferiore, non si effettua il blank
padding
esempi
• CHAR o CHAR(1)
• ‘a’ // valore valido
• ‘Aa’ //valore non valido genera errore

• CHAR(4)
• ‘a’ // valore valido
• ‘a a’ // valore valido (3 caratteri)
• ‘aaaaa’ // valore non valido

• Lo stesso vale per i VARCHAR

• I letterali caratteri sono racchiusi fra ‘’ (apici) o doppi apici


• Ed esistono le sequenze di escape
• Esempio ‘1’ o ‘a’ sono i caratteri 1 e a
Tipi temporali
• SQL definisce dei tipi temporali per permettere la gestione di date e ore
• Il formato usato è quello anglosassone:
• Data ‘anno-mese-giorno’
• Ora ‘ore:minuti:secondi’
• Nella maggior parte dei DBMS date e ore sono inserite sotto forma di stringhe di caratteri,
per cui vanno racchiuse tra apici ‘anno-mese-giorno’.
• DATE: rappresenta le date espresse come anno (4 cifre), mese (2 cifre comprese
tra 1 e 12), giorno (2 cifre comprese tra 1 e 31 con ulteriori restrizioni a seconda
del mese)
• 'YYYY-MM-DD'
• TIME: rappresenta I tempi espressi come ora (2 cifre), minuti (2 cifre) e secondi
(2 cifre) - sono utilizzati sia per rappresentare tempi che intervalli intervalli
temporali
• 'HH:MM:SS'
• DATETIME: rappresenta una concatenazione dei due tipi di dato precedenti con
una precisione al microsecondo, sono specificati nella forma ‘anno-mese-giorno
ore:minuti:secondi.microsecondi’
• 'YYYY-MM-DD HH:MM:SS.UUUUUU‘
• in mysql 'YYYY-MM-DD HH:MM:SS’
Tipi temporali - DATE
• Letterali DATE
• ‘1999-11-01’ // valido
• ‘-1999-11-01’ // non valido: la data non può essere
negativa
• ‘11-11-2011’ // non valido formato sbagliato
• ‘2011-13-11’ // non valido mese sbagliato
• ‘2011-12-41’ // non valido giorno sbagliato
• ‘2011-04-31’ // non valido – perché?
Tipi temporali - TIME
• Usati per rappresentare sia l’ora del giorno, ma
anche intervalli temporali
• Formato: 'HH:MM:SS' o 'HHH:MM:SS‘
• Valori ammissibili: da '-838:59:59' a '838:59:59‘

• Esempi di letterali
• ‘54:45:00’ // corretto
• ‘154:45:01’ //corretto
• ‘-154:45:01’ // negativo ma corretto
• ‘01:70:00’ // scorretto: i minuti sono > 59
• ‘01:59:61’ // scorretto: i secondi sono > 59
Tipi temporali - DATETIME
• Formato:'YYYY-MM-DD HH:MM:SS.UUUUUU’
• In mysql i letterali hanno il formato di sopra, ma sono
memorizzati nel formato
• 'YYYY-MM-DD HH:MM:SS’
• Con arrotondamento dei microsecondi
• HH:MM:SS devono essere un tempo e non un intervallo
temporale
• Letterali
• ‘2018-02-09 16:00:00’ // valido
• ‘2018-01-10’ // valido
• ‘2018-01-10 00:00:00’ così viene memorizzato
• ‘2018-01-10 10:20’ // valido
• ‘2018-01-10 10:20:00’
• ‘2010-04-31’ // non valido
• ‘2010-04-30 18:75:00’ // non valido
Tipi booleani
• SQL definisce un tipo BOOLEAN per rappresentare
appositamente i valori booleani
• Generalmente un dato booleano occupa soltanto un bit.
• Esempi di valori booleani (letterali):
• TRUE, FALSE, '1', ‘0‘
• UNKNOWN è un valore che può essere utilizzato solo
per verificare i valori (tramite is e is not) – come null
• Presente in mysql come sinonimo di bit(1)
• letterali
• 0 vale FALSE
• 1 vale TRUE
• in realtà TRUE e FALSE sono alias per 1 e 0
• Qui, non in Java
Valore NULL
• Il valore NULL è una speciale costante presente in tutti i DBMS
• Rappresenta l’ assenza di informazione
• è compatibile con ogni tipo di dato
• Non va confuso con lo 0, non sono la stessa cosa, anche se
internamente possono avere la stessa rappresentazione
• Utilizzato nelle espressioni aritmetiche, restituisce sempre il valore
NULL
• Confronti con NULL:
• Per verificare se un valore è NULL si deve usare l’operatore IS NULL o
IS NOT NULL e non l’operatore di uguaglianza
• se A vale NULL
• A = 0 è equivalente a falsa (è null, si comporta da false nella where)
• A > 0 è equivalente a falsa (è null, si comporta da false nella where)
• A < 0 è equivalente a falsa (è null, si comporta da false nella where)
• A <> 0 è equivalente a falsa (è null, si comporta da false nella where)
• A = NULL è equivalente a falsa (è null, si comporta da false nella where)
• A IS NULL è vera
• operatori o funzioni su valori NULL restituiscono NULL
• 1+NULL restituisce null

Potrebbero piacerti anche