SQL e ACCESS Prof. Salvatore Multazzu (salvatoremultazzu@tiscali.it) Applicazioni Informatiche nella comunicazione Modello relazionale Entità Record o Ennuple Attributi o Campi Tipi Chiavi Primarie (PK) Chiavi esterne (FK) Università degli studi di Sassari 2 PROBLEMA ENTITA STUDENTE Realizzare un DataBase per memorizzare i dati relativi agli Studenti di una Facoltà ai Corsi seguiti, agli Esami sostenuti ed ai Docenti interessati. Matricola (Tipo Testo) PK Nome (Tipo Testo) Cognome (Tipo Testo) Indirizzo (Tipo Testo) Città (Tipo Testo) Note_studente (Tipo Testo) Matricola Nome Cognome Indirizzo STUDENTE Citta Note_studente Università degli studi di Sassari 3 Università degli studi di Sassari 4
ENTITA DOCENTE ENTITA CORSO CD (Tipo Testo) PK Nome (Tipo Testo) Cognome (Tipo Testo) Città (Tipo Testo) Nome DOCENTE Cognome Citta CD CC (Tipo Testo) chiave primaria Nome (Tipo Testo) CORSO Nome CC Università degli studi di Sassari 5 Università degli studi di Sassari 6 SCHEMA E/R STUDENTE DOCENTE 1 Nome Cognome N CORSO Nome CD Citta DATA MATRICOLA VOTO Esam e 1 N N 1 CC Citta Nome Cognome Indirizzo STUDENTE Note_studente CREATE TABLE STUDENTE (MATRICOLA CHAR(8), NOME char() NOT NULL, COGNOME char() NOT NULL, INDIRIZZO char(40), CITTA char(2), NOTE_STUDENTE memo, CONSTRAINT pk_studenti PRIMARY KEY(MATRICOLA)); Università degli studi di Sassari 7 Università degli studi di Sassari 8
DOCENTE CREATE TABLE DOCENTE (CD INTEGER, NOME text() NOT NULL, COGNOME text() NOT NULL, CITTA text(2), CONSTRAINT pk_docente PRIMARY KEY(CD) ); CORSO CREATE TABLE CORSO (CC char(2), Nome char() NOT NULL, CD INTEGER, CONSTRAINT pk_corso PRIMARY KEY(CC), CONSTRAINT fk_corso_docente FOREIGN KEY (CD) REFERENCES DOCENTE(CD) ); Università degli studi di Sassari 9 Università degli studi di Sassari 10 ESAME FINESTRA QUERY CREATE TABLE ESAME (MATRICOLA CHAR(8), CC CHAR(2), VOTO SMALLINT, DATA DATE NOT NULL, CONSTRAINT pk_esamisostenuti PRIMARY KEY(MATRICOLA,CC), CONSTRAINT fk_esami1 FOREIGN KEY (MATRICOLA) REFERENCES STUDENTE(MATRICOLA), CONSTRAINT fk_esami2 FOREIGN KEY (CC) REFERENCES CORSO(CC) ); Università degli studi di Sassari 11 Università degli studi di Sassari 12
FINESTRA TABELLE FINESTRA RELAZIONI Università degli studi di Sassari 13 Università degli studi di Sassari 14 ALTER TABLE FINESTRA RELAZIONI (2) ALTER TABLE CORSO ADD COLUMN DATA_INIZIO DATE, DATA_FINE DATE, DURATA_CORSO CHAR; ALTER TABLE CORSO ALTER COLUMN DURATA INTEGER; ALTER TABLE STUDENTE ADD COLUMN Eta INTEGER; Università degli studi di Sassari 15 Università degli studi di Sassari 16
DML INSERT UPDATE DELETE STUDENTE INSERT INTO DOCENTE (CD, NOME, COGNOME) VALUES ( 15, Andrea, Rossi ); INSERT INTO DOCENTE VALUES ('14', 'ANNA', 'GREEN','SS'); UPDATE ESAMI SET Voto = Voto+1 WHERE Voto < 24; DELETE FROM STUDENTE WHERE Eta > 50; Università degli studi di Sassari 17 Università degli studi di Sassari 18 CORSO e DOCENTE ESAME Università degli studi di Sassari 19 Università degli studi di Sassari 20
SELECT (1) SELECT (2) SELECT NOME, COGNOME FROM STUDENTE WHERE eta > 24 ORDER BY COGNOME ; SELECT * FROM STUDENTE WHERE COGNOME LIKE P* AND (Eta > 24) ORDER BY Eta DESC; Università degli studi di Sassari 21 Università degli studi di Sassari 22 CARATTERI JOLLY BETWEEN ACCESS * usato con LIKE % Ansi SQL SCOPO Zero o più caratteri SELECT NOME, COGNOME, ETA FROM STUDENTE WHERE Eta Between 21 And 25;? usato con LIKE _ Carattere singolo # usato con LIKE Nessun equivalente Singola cifra da 0 a 9 Università degli studi di Sassari 23 Università degli studi di Sassari 24
BETWEEN (2) SELECT * FROM CORSO WHERE DATA_INIZIO BETWEEN #9/12/05# AND #9/21/05# ; SELECT (3) SELECT * FROM ESAME WHERE VOTO > 27 AND DATA< #5//04#; Università degli studi di Sassari 25 Università degli studi di Sassari 26 FUNZIONI DI AGGREGAZIONE SELECT (4) SELECT COUNT(*) FROM Studente; SELECT SUM(Eta) FROM Studente; SELECT AVG(Eta) AS Media FROM Studente; SELECT MIN(Eta) AS Minimo FROM Studente; Conta il numero di record nella tabella studenti Somma le età di tutti gli studenti Restituisce la media delle età degli studenti e rinomina il campo Media Restituisce la più piccola delle età degli studenti e rinomina il campo Minimo SELECT CITTA, AVG(Eta) AS Media FROM STUDENTE GROUP BY CITTA; CITTA CA NU OR Media 24,3 26 27,5 SS 26,6 Università degli studi di Sassari 27 Università degli studi di Sassari 28
SELECT (5) SELECT Min(VOTO) AS VOTO_MINIMO FROM ESAME WHERE DATA Between #1/1/2004# And #12/4/1931#; VOTO_MINIMO 18 SELECT Max(VOTO) AS VOTO_MASSIMO FROM ESAME WHERE DATA Between #1/1/2004# And #12/4/1931#; VOTO_MASSIMO Operatori AND OR NOT BETWEEN = <> LIKE <, <= >, >= Università degli studi di Sassari Università degli studi di Sassari RELAZIONI (JOIN) SINTASSI: SELECT <listaselect> FROM nome_tabella INNER JOIN tabelle_join ON criterio_join [WHERE <condizione>] [ORDER BY <lista-order>] INNER JOIN (1) SELECT CC, Corso.Nome, Cognome FROM Docente INNER JOIN Corso ON Docente.CD = Corso.CD WHERE Cognome= Rossi ; CC Nome S1 FONDAMENTI S3 SISTEMI INF Cognome ROSSI ROSSI S4 ROSSI Università degli studi di Sassari 31 Università degli studi di Sassari 32
MATRICOLA NOME COGNOME VOTO INNER JOIN (2) P234590 P500101 P500101 P500101 DIRITTO IST APPLICATA CARTA BARBI BARBI BARBI 28 APPLICATA SISTEMI INF ECONOMIA 28 SELECT S.MATRICOLA, C.NOME, COGNOME, VOTO FROM STUDENTE AS S INNER JOIN (CORSO AS C INNER JOIN ESAME AS E ON C.CC = E.CC ) ON S.MATRICOLA=E.MATRICOLA WHERE VOTO>26; P500422 P500422 P500456 P500466 P500466 P500466 P500466 DIRITTO IST ECONOMIA INGLESE SISTEMI INF DIRITTO IST INGLESE SECCI SECCI FIORE MARRAS MARRAS MARRAS MARRAS 27 28 27 P600123 PIRAS P600123 DIRITTO IST PIRAS P600123 ECONOMIA PIRAS P800090 APPLICATA SCARPA 27 P800090 INGLESE SCARPA P900400 SISTEMI INF ONOFRI 27 P900421 FONDAMENTI PREMOLI Università degli studi di Sassari 33 P900421 APPLICATA PREMOLI Università degli studi di Sassari 34 P900421 SISTEMI INF PREMOLI P900421 DIRITTO IST PREMOLI