1. 22/07/04 Ing. Ronchi Sergio 1
TIPI DI DATI
INTERI
• TINYINT(M) 1 byte
• SMALLINT(M) 2 byte
• MEDIUMINT(M) 3 byte
• INT (M) 4 byte (INTEGER è un sinonimo)
• BIGINT(M) 8 byte
NOTE:
(M) indica il numero di cifre visualizzate ed è opzionale
UNSIGNED ZEROFILL sono impostazioni opzionali possibili
2. 22/07/04 Ing. Ronchi Sergio 2
TIPI DI DATI
NUMERI REALI
• FLOAT(X) virgola mobile con precisione X
• FLOAT(M,D) singola precisione (24)
• DOUBLE(M,D) doppia precizione (53) REAL è un sinonimo
• DECIMAL(M,D) le cifre sono memorizzate come caratteri NUMERIC è sinonimo
•
NOTE:
(M,D) indica il numero di cifre visualizzate e il numero di decimali ed è opzionale
ZEROFILL sono impostazioni opzionali possibili (non è permesso lo ZEROFILL)
3. 22/07/04 Ing. Ronchi Sergio 3
TIPI DI DATI
DATA E ORA
• DATE data: formato standard YYYY-MM-DD
• DATETIME data e ora formato standard YYYY-MM-DD HH:MM:SS
• TIME dora nel formato HH:MM:SS
• TIMESTAMP(M) assume la data e l'ora dell'ultima operazione fatta sulla riga
• YEAR(2|4) anno a 2 o 4 cifre
umero di cifre visualizzate
4. 22/07/04 Ing. Ronchi Sergio 4
TIPI DI DATI
STRINGHE
• CHAR(M) stringa di dimensione fissa (max 255 caratteri)
• VARCHAR(M) stringa di dimensione variabile (max 255 caratteri)
STRINGHE DI GRANDI DIMENSIONI
• TINYBLOB 2^8 caratteri (invece di BLOB anche TEXT)
• BLOB 2^16 caratteri (invece di BLOB anche TEXT)
• MEDIUMBLOB 2^24 caratteri (invece di BLOB anche TEXT)
• LONGBLOB 2^32 caratteri (invece di BLOB anche TEXT)
ALTRI TIPI
• ENUM('vero','falso') uno solo dei due valori
• SET('uno','due') nessuno, uno o più valori
5. 22/07/04 Ing. Ronchi Sergio 5
DDL (data definition language)
CREATE TABLE CLIENTI
( CODCLI INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
NOME VARCHAR(20) NOT NULL,
DESCRIZIONE TEXT);
--------------------------------------------------
CREATE TABLE FATTURE
( NUMERO SMALLINT(6) UNSIGNED ZEROFILL NOT NULL,
DATA DATE,
CODCLI INTEGER REFERENCES CLIENTI (CODCLI)
ON UPDATE CASCADE,
PRIMARY KEY(NUMERO,DATA));
6. 22/07/04 Ing. Ronchi Sergio 6
DDL (vincoli)
CREATE TABLE Persone
(Nome TEXT(30),
Cognome TEXT(30),
Provincia TEXT(2),
CONSTRAINT province_fk FOREIGN KEY (Provincia)
REFERENCES Procince);
CREATE UNIQUE INDEX essai_index
ON Persone (Nome,Cognome);
7. 22/07/04 Ing. Ronchi Sergio 7
DDL (vincoli)
CREATE TABLE Customer
( number VARCHAR(40) NOT NULL,
name VARCHAR(100) NOT NULL,
ssn VARCHAR(50) NOT NULL,
age INTEGER NOT NULL,
CONSTRAINT cust_pk PRIMARY KEY (number),
UNIQUE ( ssn ),
CONSTRAINT age_check CHECK (age >= 0 AND age < 200) )
8. 22/07/04 Ing. Ronchi Sergio 8
DDL (data definition language)
eliminazione:
DROP TABLE PRODOTTI;
modifica
ALTER TABLE CLIENTI
ADD COLUMN INDIRIZZO VARCHAR(50);
ALTER TABLE CLIENTI
ALTER COLUMN INDIRIZZO SET DEFAULT ‘Sconosciuto’
ALTER TABLE CLIENTI
DROP COLUMN DESCRIZIONE;
ALTER TABLE CLIENTI
ADD INDEX CERCA_NOME (NOME);
ALTER TABLE CLIENTI
MODIFY COLUMN NOME VARCHAR(50);
ALTER TABLE CLIENTI
CHANGE COLUMN NOME NAME VARCHAR(50);
9. 22/07/04 Ing. Ronchi Sergio 9
DML (data manipulation language)
Inserimento dati:
INSERT INTO PRODOTTI (NOME, PREZZO)
VALUES ('Notebook',1000.50);
INSERT INTO PRODOTTI (NOME, PREZZO)
SELECT 'Scheda di Rete',45.50;
INSERT INTO CLIENTI (CODCLI, NOME, INDIRIZZO)
SELECT CODICE,RAGSOC,INDIRIZZO FROM ANAGRAFICA
10. 22/07/04 Ing. Ronchi Sergio 10
DML (data manipulation language)
Eliminazione:
DELETE FROM PRODOTTI
WHERE CODPRO=999;
DELETE FROM ANAGRAFICA
WHERE YEAR(Data)<1900 AND PROVINCIA=‘MI’;
11. 22/07/04 Ing. Ronchi Sergio 11
DML (data manipulation language)
Aggiornamento dati:
modifica il nome del prodotto con codice 23
UPDATE PRODOTTI SET
NOME='Hard Disk'
WHERE CODPRO=23;
modifica il prezzo, aumentandolo del 10%, di tutti i prodotti
UPDATE PRODOTTI SET
PREZZO=PREZZO*1.1;
modifica il prezzo, aumentandolo del 20% e la descrizione dei prodotti
con codice maggiore di 100
UPDATE PRODOTTI SET
PREZZO=PREZZO*1.2,
DESCRIZIONE ='Lusso'
WHERE CODPRO>100;
12. 22/07/04 Ing. Ronchi Sergio 12
QUERIES (proiezione)
Visualizzare tutti i dati contenuti in una tabella:
SELECT * FROM PRODOTTI;
Selezione delle colonne (o dei campi)
SELECT NOME,PREZZO FROM PRODOTTI;
Selezione delle colonne (o dei campi) con alias
SELECT NOME 'Nome del prodotto',
PREZZO 'Prezzo di Vendita' FROM PRODOTTI;
Selezione delle colonne con esecuzioni di operazioni sulle colonne:
SELECT NOME 'Nome del prodotto',
PREZZO*(1+IVA /100) 'Prezzo con IVA' FROM PRODOTTI;
13. 22/07/04 Ing. Ronchi Sergio 13
QUERIES (utilizzo di funzioni)
Solitamente le funzioni interne dipendono dal DBMS utilizzato, tuttavia alcune sono comuni o
abbastanza simili.
Funzioni relative alle stringhe:
Concatenazione
SELECT concat(COGNOME, ',' , NOME) FROM STUDENTI; (MYSQL)
SELECT COGNOME || ',' || NOME FROM STUDENTI; (ORACLE)
SELECT COGNOME & ',' & NOME FROM STUDENTI; (ACCESS)
Sottostringa
SELECT substring(NOME,1,3) FROM STUDENTI;
SELECT MID(NOME,1,3) FROM STUDENTI; (ACCESS)
Altre funzioni stringa:
LENGTH(str) lunghezza
INSTR(str,'p') dà la posizione della prima occorrenza di 'p'
TRIM(str) elimina gli spazi prima e dopo la stringa
LEFT(str,5) cinque caratteriri a sistra (analogo RIGHT(6))
REPLACE(str,'www','w3') sostituzione di una sottostringa
14. 22/07/04 Ing. Ronchi Sergio 14
QUERIES (utilizzo di funzioni)
Funzioni relative alle date o ore:
YEAR(data), MONTH(data), DAYOFMONTH(data), QUARTER(data),
DAYOFWEEK(data), DAYOFYEAR(data), WEEK(data), HOUR(data),
MINUTE(data), SECOND(data)
TO_DAYS('1999-01-02') => numero di giorni dall'anno 0
FROM_DAYS(729456) => l'opposto della precedente
DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
-> 'Saturday October 1997'
select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
-> '22:23:00'
NOW() fornisce la data attuale
15. 22/07/04 Ing. Ronchi Sergio 15
QUERIES (utilizzo di funzioni)
Funzioni matematiche
Esiste un insieme notevole di tutte le principali funzioni matematiche,
tra le quali sicuramente importante è la funzione di arrotondamento:
ROUND(X,2) arrotonda con due decimali
Controllo
IF(VOTO>=6,'Sufficiente','Insufficiente')
IFNULL(PREZZO,'Non definito')