2. Tipi linguaggi supportati da SQL
Linguaggio DDL definizione dati
Linguaggio DML modifica dei dati
Linguaggio QL interrogazione dei dati
Linguaggio DCL controllo del database
3. Linguaggio DDL
Per la definizione delle tabelle e delle relazioni (solo InnoDB)
Insiemi di dati notevoli ammessi da Mysql
TINYINT 1 byte da 0 a 255 o da -127 a +128 con segno
SMALLINT 2 byte da 0 a 65535 senza segno e da -32767 a 32768 con segno
INTEGER o MEDIUMINT a 4 byte
BIGINT a 8 byte
DECIMAL (P,Q) Numeri reali con p cifre di cui q cifre per la mantissa e p-q cifre per
la caratteristica (in binario)
DOUBLE a 8 byte con eventualmente precisione Q o REAL o FLOAT reali a 4 byte
sempre di precisione Q;
CHAR(N) stringa di lunghezza fissa di n caratteri
VARCHAR(N) stringa di lunghezza fino a n caratteri
TEXT, MEDIUMTEXT, LONGTEXT variabili stringa grandi
BLOB, MEDIUMBLOB e LONGBLOB per dati binari con dimensioni fino a 4 Giga
bye (utili per immagazzinare files)
DATA/TIME tipo dati per le date egli orari
ENUM e SET tipi enumerativi
4. Creazione della tabella
Sintassi del comando
CREATE TABLE NOME TABELLA
(NOME CAMPO1 TIPO1 [NOT NULL], NOME
CAMPO2 TIPO2 [NOT NULL],...,NOME
CAMPON TIPO N [NOT NULL], PRIMARY KEY
NOME CAMPO CHIAVE) [ENGINE=INNODB];
NOT NULL indica valore non nullo. PRIMARY
KEY LA CHIAVE PRIMARIA, ENGINE INNODB
dI adottare la gestione delle tabelle mediante
InnoDB.
5. Vincoli di Integrit Referenziale
Integrit referenziale elimina le ridondanze e le
inconsistenze fra tabelle collegate mediante
associazioni;
Ad esempio esiste movimento bancario senza
conto corrente ? No
Ad esempio sposto alunno da una classe ad
un altra il numero degli alunni della classe
deve essere aggiornato;
Riguarda quindi modalit di creazione delle
tabelle;
6. Creazione di Tabelle mediante
vincoli di integrit referenziale
Create Table NomeTabella
(Nomecampo1 tipo1 [opzioni],
Nomcampo2 tipo2 [opzioni],
NomecampoFK tipo3 [opzioni],
NomecampoN tipoN [opzion],
Primary Key NomeCampoPK,
Foreign Key NomecampoFK
References NomeTabellaSorgente(NomeCampoPK
Tabella Sorgente) [On Delete Cascade] [On Update
Cascade]);
On Delete Cascade cancella righe di tabelle correlate a catena
On Update Cascade aggiorna valori di colonne correlati di una chiave
sI aggiornano tutti i valori che compongono una chiave esterna
(Campo chiave costituito da pi湛 colonne)
In Entrambi i casi sono previste le clausole opzionali
NO ACTION SET NULL SET DEFAULT
7. Azioni per i vincoli di integrit
NO ACTION il Delete non viene eseguito o
viene inviato un messaggio di errore se si
tenga di eliminare o aggiornare una riga di
contenente una chiave che fa riferimento a
righe correlate
SET NULL/DEFAULT Se si tenta di cancellare
o aggiornare righe contenente una riga con
una chiave che fa riferimento a righe
correlate di altre righe i valori delle colonne
componenti le chiavi esterne sono impostate
a NULL o Predefiniti
8. Esempio Creazione di 2 tabelle
con vincolo di integrit referenziale in
cancellazione
CREATE TABLE buildings (
buildingno INT PRIMARY KEY
AUTO_INCREMENT,
building_name
VARCHAR(255) NOT NULL,
address VARCHAR(255) NOT
NULL);
CREATE TABLE rooms (
room_no INT PRIMARY KEY
AUTO_INCREMENT,
room_name VARCHAR(255) NOT
NULL,
building_no INT NOT NULL,
FOREIGN KEY (building_no)
REFERENCES buildings
(building_no)
ON DELETE CASCADE);
E relazione
1 a N
Nel momento che con la DELETE
Cancello id=2 dalla tabella Buildings
sono eliminato anche i record della
Tabella Rooms
9. Esempio 1
Creare una tabella conti correnti con i seguenti
campi:
cod_conto, nome, cognome, saldo, data, tasso di
interesse:
create table conti_correnti (cod_conto char(10 , nome varchar(25) not
null, cognome varchar(25) not null, saldo decimal(15,3) not null,
data_saldo date not null, tasso decimal(4,2), primary key (cod_conto))
engine=Innodb;
10. Inserire dei dati nella tabella
INSERT INTO NOME TABELLA VALUES (valore1, valore2,
....,valoren);
Notare che 竪 sintassi contratta devo richiamare i campi cos狸 come
sono stati creati;
Le stringhe e le date sono fra apici singoli
Se non ricordo l'ordine dei campi devo richiamare il comando SQL
con la sintassi competa:
INSERT INTO NOME TABELLA NOME CAMPO1,..., NOME
CAMPON VALUES (valore1, valore2, ....,valoren);
11. Esempio 2
inserire i dati di 5 correntisti nella tabella
conti_correnti
vediamo per 1 valore:
insert into conti_correnti values ('0001','gennaro','esposito',1234.5,'2008-
05-05',3.895);
12. Esempio 3
Per aggiungere un campo alla tabella
ALTER TABLE NOME TABELLA ADD NOME
CAMPO1 TIPO 1 [NOT NULL] AFTER |
BEFORE CAMPO ESISTENTE;
Per eliminare un campo dalla tabella
ALTER TABLE NOME TABELLA DROP NOME
CAMPO1,..., NOME CAMPON;
Per vedere la struttura della tabella
DESC NOMETABELLA;
13. Comandi Sql per la manipolazione
dati
Comandi per manipolare date
Comandi per manipolare stringhe
Comandi per la manipolazione dei dati numerici
14. Comandi per gestire date
Funzione Year restituisce l'anno di una data
Funzione Month e Day mese e giorno di una data
Funzione DateDiff Valuta la differenza fra due date ad esempio
select * from conti_correnti 'where datediff('2008-01-
01',data_saldo) > 30;
Visualizza i dati con data_saldo superiore a 30 giorni.
Funzione Data_Format per convertire la data da un formato ad un
altro ad esempio
Data_Format('2008-01-03','%W %M %Y') restituisce data in
formato giorno esteso mese anno.
%W indica giorno settimana esteso %w giorno numerico da 1 a
31, %M mese esteso, %m mese numerico.
15. Funzioni per le stringhe
Funzione Concat per concatenare pi湛 stringhe in campi
Concat(stringa1,stringa2,..,ecc)
Funzione Upper e Lower per conversione da minuscolo a maiuscolo e
viceversa
Funzione per eliminare spazi Trim, eliminare spazi a sinistra Ltrim e a
destra Rtrim
Funzione Substring(stringa, inizio, lunghezza) estrae una stringa dal
carattere indicato come iniziale e di lunghezza indicato
nell'argomento.
Funzione replace rimpiazza una sequenza di caratteri in una stringa
Replace(stringa,caratteri vecchi,nuovi caratteri)
Funzione Length per la lunghezza di una stringa
16. Funzioni di calcolo numerico
Div,Mod divisione e resto intero
Power (base,esponente) calcola la potenza di un
numero
Exp, ln,log2, log10 funzioni trascendenti
Sqrt radice quadrata
17. Applicazione delle funzioni
Possono essere applicate come campo calcolato
o come criterio da valutare
Se descritto come campo calcolato si pu嘆
utilizzare la definizione di alias.
Ad esempio
SELECT NOME CAMPO1, NOMECAMPO2,
...FUNZIONE(NOMECAMPI) AS ALIAS FROM
TABELLA WHERE CRITERIO
18. Funzioni di aggregazione
Permettono di aggregare i dati secondo uno o pi湛
criteri
L'espressione generale 竪:
Select nomecamp1, nomecampo.
funzione_aggregazione(nomecampo) from
tabella where criterio group by nome campo
having criterio.
La differenza fra where e having che la clausola
where prima li filtra e la clausola having li
raggruppo dopo che sono stati filtrati.
19. Funzioni di aggregrazione
Count conteggio
Max e Min massimo e minimo di un campo
Sum, Avg somma e media dei campi
Supponiamo di avere la tabella movimenti
20. Raggruppiamo i movimenti per
conto
Select * from movimenti gruop by cod_conto;
Visualizza 4 righe quanti sono i codici di conto presenti. Le righe
visualizzate sono le prime intercettate nella tabella.
Select *,sum(importo) as saldo from movimenti group by
cod_conto;
Effettua la somma degli importo dei movimenti di ciascun conto e
lo assegna all'alias saldo raggruppando il tutto per cod_conto.
Select *,sum(importo) as saldo from movimenti group by
cod_conto having saldo>0;
In questa ultima query calcolo il saldo e poi visualizza i saldi dei
conti raggruppati per conto con saldo positivo.