SQL Matteo Magnani, Danilo Montesi Università di Bologna SQL. Linguaggio di interrogazione per basi di dati relazionali

Documenti analoghi
SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Tipi numerici esatti Valori interi o con parte decimale di lunghezza prefissata

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

SQL-DDL. Basi di Dati. Prof. Alfredo Cuzzocrea Università degli Studi di Trieste

Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.2 Data Description Language - 2

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

Stringhe di caratteri

Corso di Basi di Dati

Equivalenza di espressioni. Equivalenze. Equivalenze. Due espressioni sono equivalenti se: Atomizzazione delle selezioni σ F1 F2 (E) σ F1 (σ F2 (E))

Viste come strumenti di programmazione

SQL. Dott.ssa Elisa Quintarelli

Appunti dalle lezioni. Sistemi informativi e basi di dati. Il modello relazionale. SQL come DCL Utilizzo di un DBMS Reale.

Laboratorio di Basi di Dati

SQL. Lezione 1. Docente: Alberto Belussi

Principi di Progettazione del Software a.a Il linguaggio SQL. Prof. Luca Mainetti Università del Salento

Laboratorio di Basi di Dati

Principi di Progettazione del Software a.a Il linguaggio SQL. Linguaggi per DBMS

Universita di Milano Bicocca Corso di Basi di dati 1 in elearning C. Batini 6. SQL DDL 6.1 Data Description Language - 1

Dichiarazione degli schemi in SQL DDL 1

Basi di Dati. Laboratorio Ing. G. Laboccetta Dott.ssa. V. Policicchio. Corso di Laurea in Informatica. a.a

Viste (relazioni derivate)

Algebra con valori nulli

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Laboratorio di Basi di Dati e Multimedia

SQL. Laboratorio di Progettazione di Basi di Dati (CdS in Informatica e TPS)

Il linguaggio SQL. Il linguaggio SQL

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL

Basi di Dati e Sistemi Informativi. Structured Query Language

Linguaggio SQL: fondamenti D B M G

D B M G. Linguaggio SQL: fondamenti. Gestione delle tabelle

SQL: "storia" 31/05/2006 2

Sistemi di Elaborazione delle Informazioni

Creazione di una tabella Modifica della struttura di una tabella Cancellazione di una tabella Dizionario dei dati Integrità dei dati

Elena Baralis 2007 Politecnico di Torino 1

SQL Laboratorio di Basi di Dati a.a. 2002/2003

Basi di dati SQL. Standardizzazione di SQL. Linguaggi di Interrogazione: SQL. Prof.Angela Bonifati

Laboratorio di Basi di Dati Per Bioinformatica

Elena Baralis 2007 Politecnico di Torino 1

Il linguaggio SQL: DDL di base

Laboratorio di Basi di Dati e Multimedia

Corso di Informatica (Basi di Dati)

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

Linguaggio SQL: fondamenti D B M G. Gestione delle tabelle

Elena Baralis 2007 Politecnico di Torino D B M G M BG. Gestione delle tabelle. Linguaggio SQL: fondamenti. Creazione di una tabella (1/3)

Gestione delle tabelle

Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica II Modulo Basi di dati a.a

IL MODELLO RELAZIONALE

SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA. 3. Panoramica su SQL Prof. Mauro Giacomini

SQL. SQL (Structured Query Language) è un linguaggio di interrogazione per basi di dati relazionali

Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati

Domini elementari, 2. Basi di dati. Domini elementari, 4. Domini elementari, 3. Domini definiti dagli utenti. Domini elementari, 5

Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati

Basi di Dati prof. Letizia Tanca

Laboratorio di Basi di Dati e Web

Introduzione Basi di Dati. Orazio Battaglia

Basi di Dati. Laboratorio Ing. G. Laboccetta Dott.ssa. V. Policicchio. Corso di Laurea in Informatica. a.a

SQL. Storia e standard

Laboratorio di Basi di Dati

Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica II Modulo Basi di dati a.a

PRODOTTO CARTESIANO Caso Generale

Basi di dati - Laboratorio

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL: fondamenti. Il linguaggio SQL

SQL Sintassi Dei Comandi

Basi di Dati Relazionali

insert into Dipartimento(NomeDip, Città) values('produzione','torino') insert into ProdottiMilanesi (select codice, descrizione from Prodotto

4/16/07. Le Basi di Dati Relazionali. Concetti Fondamentali. Base di dati, tabella, ennupla, attributo, dominio. Valori nulli

SQL. SQL come Data Manipulation Language - Inserimento, cancellazione e aggiornamento di righe

SQL. Storia un po piu in dettaglio. SQL: "storia" Tre livelli per SQL-2. Standard, dialetti, mercato

Laboratorio di Basi di Dati

SQL: Concetti Base -Prima Parte-

Inserimento. Cancellazione. Modifica. INSERT INTO Persone VALUES ('Mario',25,52) INSERT INTO Persone(Nome, Eta, Reddito) VALUES('Pino',25,52)

SQL: DDL, VI, Aggiornamenti e Viste

Basi di Dati. Sistemi per Basi di Dati Relazionali: Modello Logico. Concetti Fondamentali. Concetti Fondamentali

Definizione di domini

SQL - Tipi di dato Il linguaggio SQL

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. SQL - Tipi di dato. SQL - Tipi di dato numerici. SQL - Tipi di dato numerici

ESERCITAZIONE: Fornitore-Fornisce-Articolo

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

LABORATORIO di INFORMATICA

Mirco Nanni ISTI CNR, Pisa. CdL in Lettere A.A. 2007/2008

Data Definition in MySQL

Fondamenti di Informatica A. A / 1 9

Fondamenti di Informatica e Programmazione

Corso di Informatica Linguaggio SQL prima parte

5 SQL : Definizione e manipolazione dei dati

Structured Query Language

Lezione 3. Il modello relazionale

Modulo 10: Basi di dati e loro gestione

Informatica documentale Laurea in Scienze della Comunicazione Prova scritta del 25 giugno Cognome e nome: Matricola:

Corso di Basi di Dati A.A. 2015/2016

Interpretazione delle query nidificate

A.A. 2018/2019. Introduzione a SQL FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE. Docente Prof. Raffaele Pizzolante

Linguaggio SQL: costrutti avanzati D B M G

DDL DML. Tipi di linguaggi per basi di dati. Si distinguono due categorie:

Linguaggio SQL: costrutti avanzati Controllo dell accesso

Laboratorio di Sistemi Informativi

Transcript:

SQL Linguaggio di interrogazione per basi di dati relazionali

SQL Structured Query Language Linguaggio di interrogazione per basi di dati relazionali. Permette di comunicare con diversi sistemi tramite un unico linguaggio (limitatamente all utilizzo di semplici istruzioni). Comprende funzionalita sia di Data Definition Language (DDL), per modificare lo schema di un database, sia di Data Manipulation Language (DML), per modificarne le istanze. 2

SQL Prima proposta: SEQUEL (IBM Research, 1974, System R); Standard: 1986: prima versione (ANSI) 1989: SQL-89 1992: SQL-2 1999: SQL-3 (ISO) Livelli di aderenza: Entry SQL Intermediate SQL Full SQL 3

SQL SQL come Data Definition Language

Creazione di tabelle relazionali Il processo di progettazione di una base di dati relazionale porta alla definizione di tabelle (schema logico). Ad esempio: DIPARTIMENTO(Codice, Nome, Indirizzo) In SQL, questa tabella puo essere create nel seguente modo: CREATE TABLE DIPARTIMENTO( Codice CHAR(4) PRIMARY KEY, Nome VARCHAR(40), Indirizzo VARCHAR(80) ) 5

Creazione di tabelle Istruzione per la creazione della tabella Nome della tabella CREATE TABLE DIPARTIMENTO( Codice CHAR(4) PRIMARY KEY, Nome VARCHAR(40), Indirizzo VARCHAR(80) ) Nomi degli attributi Domini, cioe insieme dei valori ammissibili per il corrispondente attributo 6

Creazione di tabelle Otteniamo una tabella come la seguente, momentaneamente vuota. Per ogni attributo, abbiamo specificato un dominio, cioè l insieme di valori ammissibili per quell attributo. Codice Nome Indirizzo 7

Domini I domini possono essere elementari, cioè messi direttamente a disposizione dal linguaggio SQL. Inoltre, un utente può definire propri domini a partire da quelli semplici. Inizieremo con il vedere i domini elementari. 8

Domini elementari: Caratteri Stringa di caratteri di lunghezza predefinita: character(4) Esattamente 4 caratteri char(4) character(4) character set Greek Stringa di caratteri di lunghezza variabile: character varying (4) varchar(4) varchar(4) character set Greek Al massimo 4 caratteri 9

Domini elementari: Bit Bit: utile per rappresentare flag, cioè possesso o meno di una proprietà. Stringa di bit di lunghezza predefinita: bit(1) Esattamente 1 bit bit(5) Stringa di bit di lunghezza variabile: bit varying (4) varbit(4) Al massimo 4 bit 10

Domini elementari: numerici esatti Interi: integer smallint Decimali numeric(3) numeric(5,2) decimal(5,2) 3 cifre significative [-999, +999] [-999.99, +999.99] 5 cifre significative, di cui 2 dopo la virgola [-999.99???, +999.99???] Almeno 5 cifre significative, di cui almeno 2 dopo la virgola 11

Domini elementari: numerici approssimati Dichiarazioni: float float(5) real double precision Esempi: 0,467E12 0,24E-3-0,4E-7 0.467x10 12 Numero di cifre per rappresentare la mantissa mantissa esponente 12

Domini elementari: temporali Date (anno, mese, giorno) date 2003-10-1 Orario (ora, minuti, secondi) time 10:59:05 time(3) 10:59:05.000 time with time zone 10:59:05+1:00 Istante (anno, mese, giorno, ora, minuti, secondi) timestamp 2003-10-1 10:59:05.000000 timestamp(3) 2003-10-1 10:59:05.000 timestamp with time zone 2003-10-1 10:59:05+1:00 13

Domini elementari: intervalli di tempo Rappresenta la durata di un evento interval year(2) interval year(3) to month interval day fino a 99 anni interval day(4) to second(5) fino a 999 anni e 11 mesi fino a 9999 giorni, 23 ore, 59 minuti e 59.99999 secondi 14

Domini elementari Ricapitolando, si possono utilizzare i seguenti domini elementari: Stringhe di caratteri. Stringhe di bit. Numerici precisi e approssimati. Tempi e intervalli temporali. 15

Esempi di domini CREATE TABLE DIPARTIMENTO( Codice CHAR(4) PRIMARY KEY, Nome VARCHAR(40), Indirizzo VARCHAR(80)) Codice INFO MATE Nome Scienze dell informazione Matematica Indirizzo Via Mura A. Zamboni, 7 null 16

Esempi di domini CREATE TABLE DOCENTI( ID CHAR(5) PRIMARY KEY, Nome VARCHAR(40), Cognome VARCHAR(80), Stipendio INTEGER) ID Nome Cognome Stipendio 00232 Mario Rossi 4000 17

Esempi di domini CREATE TABLE DOCENTI( ID CHAR(5) PRIMARY KEY, Nome VARCHAR(40), Cognome VARCHAR(80), Licenziato DATE) ID Nome Cognome Licenziato 00233 Mario Neri 2004-01-01 18

Domini personalizzati E possibile creare nuovi domini, a partire da quelli presentati finora. Per creare un dominio, si può modificare un tipo elementare: Definendo un valore di default. Aggiungendo vincoli (restrizioni). Un dominio può essere utile per non ripetere più volte gli stessi vincoli. 19

Domini personalizzati Momentaneamente ne vedremo solo un esempio: CREATE DOMAIN VOTO DEFAULT null CHECK (value>=18 AND value<=30) 20

Domini personalizzati Istruzione per la creazione del dominio Nome del dominio CREATE DOMAIN VOTO DEFAULT null CHECK (value>=18 AND value<=30) Comportamento di default Vincolo. Vedremo più avanti come definire vincoli complessi. 21

Vincoli I domini permettono di vincolare i valori che popoleranno la base di dati. Ci sono però altri tipi di vincoli che è bene potere esplicitare. Ad esempio, potremmo desiderare che non ci siano due docenti differenti con lo stesso codice docente, oppure che per ogni docente venga riportato almeno il cognome. 22

Vincoli Vedremo due classi di vincoli. I vincoli intrarelazionali riguardano una tabella. I vincoli interrelazionali riguardano più tabelle contemporaneamente. 23

Vincoli intrarelazionali Partiamo da una tabella senza vincoli: CREATE TABLE DOCENTI( ID CHAR(5), Nome VARCHAR(40), Cognome VARCHAR(80), Stipendio INTEGER ) 24

Vincoli intrarelazionali Se desideriamo che il cognome di un docente venga sempre specificato: CREATE TABLE DOCENTI( ID CHAR(5), Nome VARCHAR(40), Cognome VARCHAR(80) not null, Stipendio INTEGER ) 25

Vincoli intrarelazionali Se vogliamo che non ci siano due ID uguali: CREATE TABLE DOCENTI( ID CHAR(5) unique, Nome VARCHAR(40), Cognome VARCHAR(80) not null, Stipendio INTEGER ) 26

Vincoli intrarelazionali Se non vogliamo due docenti che si chiamano allo stesso modo: CREATE TABLE DOCENTI( ID CHAR(5) unique, Nome VARCHAR(40), Cognome VARCHAR(80) not null, Stipendio INTEGER, unique(nome, Cognome) ) 27

Vincoli intrarelazionali Attenzione: Nome VARCHAR(40) not null, Cognome VARCHAR(80) not null, unique(nome, Cognome) E diverso da: Nome VARCHAR(40) not null unique, Cognome VARCHAR(80) not null unique, 28

Vincoli intrarelazionali ID può ancora presentare valori nulli. Vorremmo che diventasse chiave primaria: CREATE TABLE DOCENTI( ID CHAR(5) primary key, Nome VARCHAR(40), Cognome VARCHAR(80) not null, Stipendio INTEGER, unique(nome, Cognome) ) 29

Vincoli intrarelazionali Se volessimo utilizzare l accoppiata Nome- Cognome come chiave primaria: CREATE TABLE DOCENTI( ID CHAR(5) not null unique, Nome VARCHAR(40), Cognome VARCHAR(80) not null, Stipendio INTEGER, primary key (Nome, Cognome) ) 30

Vincoli intrarelazionali Ricapitolando: not null, unique, primary key. La sintassi di unique e primary key cambia se ci si riferisce a piu attributi contemporaneamente. Esiste infine un costrutto particolarmente potente: check. Per comprenderne a pieno l utilizzo è però necessario introdurre altri aspetti di SQL. Lo vedremo quindi in seguito più in dettaglio. 31

Vincoli intrarelazionali CREATE TABLE DOCENTI( ID CHAR(5) not null unique, Nome VARCHAR(40), Cognome VARCHAR(80) not null, Stipendio INTEGER check (Stipendio>=3000), primary key (Nome, Cognome) ) 32

Vincoli interrelazionali I vincoli interrelazionali più importanti consistono nelle chiavi importate (foreign key). E anche possibile definire vincoli interrelazionali tramite il comando check, ma vedremo come in seguito. Ripassiamo brevemente il significato di chiave importata. 33

Vincoli interrelazionali Codice Data Vigile Prov Numero Infrazioni 65524 3/9/1997 343 MI 3K9886 87635 4/12/1997 476 MI 6D5563 82236 4/12/1997 343 RM 7C5567 35632 6/1/1998 476 RM 7C5567 Automobili Matricola 343 476 548 Vigili Cognome Nome Rossi Luca Neri Pino Nicolosi Gino Prov MI MI RM RM MI Numero 3K9886 6D5563 7C5567 1A6673 5E7653 Prop Nestore Nestore Polluce Mussone Marchi 34..................

Vincoli interrelazionali create table Infrazioni( Codice character(6) primary key, Data date not null, Vigile integer not null references Vigile(Matricola), Provincia character(2), Numero character(6), foreign key(provincia, Numero) references Automobili(Provincia, Numero)) 35

Vincoli interrelazionali Infrazioni è detta tabella interna, mentre Vigili e Automobili sono dette tabelle esterne. Una chiave importata ha come unico vincolo unique sull attributo/i della tabella esterna. references può essere utilizzato su un singolo attributo, mentre foreign key(...) references su un numero qualsiasi di attributi. 36

Vincoli interrelazionali: politiche di reazione Codice Data Vigile Prov Numero Infrazioni 65524 3/9/1997 343 MI 3K9886 87635 4/12/1997 476 MI 6D5563 82236 4/12/1997 343 RM 7C5567 35632 6/1/1998 476 RM 7C5567 Matricola 343 476 548 Vigili Cognome Nome Rossi Luca Neri Pino Nicolosi Gino Cancellazione in una tabella interna: NESSUNA REAZIONE 37

Vincoli interrelazionali: politiche di reazione Codice Data Vigile Prov Numero Infrazioni 65524 3/9/1997 343 MI 3K9886 87635 4/12/1997 476 MI 6D5563 82236 4/12/1997 343 RM 7C5567 35632 6/1/1998 477 RM 7C5567 Matricola 343 476 548 Vigili Vincolo non Cognome Nome soddisfatto nella tabella interna: Rossi Luca PROIBITO Neri Pino Nicolosi Gino 38

Vincoli interrelazionali: politiche di reazione Codice Data Vigile Prov Numero Infrazioni 65524 3/9/1997 343 MI 3K9886 87635 4/12/1997 476 MI 6D5563 82236 4/12/1997 343 RM 7C5567 35632 6/1/1998 476 RM 7C5567 Matricola 343 476 548 Vigili Cognome Nome Rossi Luca Neri Pino Nicolosi Gino Modifica in una tabella esterna: otteniamo valori non ammissibili, dobbiamo ripristinare il vincolo. COME? 39

Vincoli interrelazionali: politiche di reazione Codice Data Vigile Prov Numero Infrazioni 65524 3/9/1997 343 MI 3K9886 87635 4/12/1997 476 MI 6D5563 82236 4/12/1997 343 RM 7C5567 35632 6/1/1998 476 RM 7C5567 Matricola 343 476 548 Vigili Cognome Nome Rossi Luca Neri Pino Nicolosi Gino SOLUZIONE 1: PROPAGAZIONE DELLA CANCELLAZIONE 40

Vincoli interrelazionali: politiche di reazione Codice Data Vigile Prov Numero Infrazioni 65524 3/9/1997 null MI 3K9886 87635 4/12/1997 476 MI 6D5563 82236 4/12/1997 null RM 7C5567 35632 6/1/1998 476 RM 7C5567 Matricola 343 476 548 Vigili Cognome Nome Rossi Luca Neri Pino Nicolosi Gino SOLUZIONE 2: ANNULLAMENTO DEI VALORI NON AMMISSIBILI 41

Vincoli interrelazionali: politiche di reazione Codice Data Vigile Prov Numero Infrazioni 65524 3/9/1997 343 MI 3K9886 87635 4/12/1997 476 MI 6D5563 82236 4/12/1997 343 RM 7C5567 35632 6/1/1998 476 RM 7C5567 Matricola 666 476 548 Vigili Cognome Nome Rossi Luca Neri Pino Nicolosi Gino Problema simile se vengono modificati valori di una chiave importata. 42

Violazione dei vincoli Per tutti i vincoli intrarelazionali, si assume che se violati a causa di un aggiornamento, il comando di aggiornamento venga rifiutato segnalando l errore all utente. Per i vincoli di integrità referenziale, SQL permette di scegliere altre reazioni da adottare quando viene rilevata una violazione La reazione è possibile solo per le operazioni sulla tabella esterna, che si possono propagare secondo una certa politica verso la tabella interna. Le violazioni possibili sono causate da modifiche di attributi o cancellazione di righe. 43

Politiche di reazione Specificata immediatamente dopo il vincolo di integrità consente di associare politiche diverse ai diversi eventi (delete, update) secondo la seguente sintassi: on delete < cascade set null set default no action > on update < cascade set null set default no action > 44

Reazioni per delete cascade: si propagano le cancellazioni. set null: all attributo referente viene assegnato il valore nullo al posto del valore cancellato nella tabella. set default: all attributo referente viene assegnato il valore di default al posto del valore cancellato nella tabella esterna. no action: la cancellazione non viene consentita. 45

Reazioni per update cascade: il nuovo valore valore viene propagato nell altra tabella. set null: all attributo referente viene assegnato il valore nullo al posto del valore modificato nella tabella. set default: all attributo referente viene assegnato il valore di default al posto del valore modificato nella tabella esterna. no action: l azione di modifica non viene consentita. 46

Vincoli interrelazionali: politiche di reazione create table Infrazioni( Codice character(6) primary key, Data date not null, Vigile integer not null references Vigile(Matricola), Provincia character(2), Numero character(6), foreign key(provincia, Numero) references Automobili(Provincia, Numero) on update cascade on delete set null ) 47

Modifiche degli schemi Abbiamo visto come creare tabelle, e in parte come definire domini personalizzati. Uno schema di un database può essere costituito da questi e da altri elementi, che impareremo a dichiarare in seguito. Come possiamo fare se abbiamo la necessità di modificare una tabella o un dominio successivamente alla loro creazione? 48

Modifiche degli schemi E possibile manipolare schemi a posteriori tramite i seguenti comandi: ALTER DROP 49

Cancellazione di tabelle Istruzione per la cancellazione della tabella Nome della tabella DROP TABLE DIPARTIMENTO Solo se la tabella non e vuota. DROP TABLE DIPARTIMENTO RESTRICT DROP TABLE DIPARTIMENTO CASCADE Indipendentemente dal contenuto 50

Cancellazione di domini Istruzione per la cancellazione del dominio Nome del dominio DROP DOMAIN VOTO DROP DOMAIN VOTO RESTRICT Solo se il dominio non e utilizzato da nessun attributo. DROP DOMAIN VOTO CASCADE Indipendentemente dall utilizzo. Gli attributi che lo utilizzavano mantengono la definizione di tipo. 51

Comando DROP DROP... CASCADE ATTENZIONE AGLI EFFETTI INDESIDERATI. Ne parleremo quando avremo introdotto altri elementi dello schema. 52

Alterazione di tabelle (Colonne) ALTER TABLE DIPARTIMENTO ADD COLUMN NASCITA DATE ALTER TABLE DIPARTIMENTO DROP COLUMN NASCITA 53

Alterazione di tabelle (Default) ALTER TABLE DIPARTIMENTO ALTER COLUMN NASCITA DROP DEFAULT ALTER TABLE DIPARTIMENTO ALTER COLUMN NASCITA SET DEFAULT 1940-01-01 54

Alterazione di tabelle (Vincoli) ALTER TABLE DIPARTIMENTO ADD CONSTRAINT DefNuovoVincolo ALTER TABLE DIPARTIMENTO DROP CONSTRAINT NomeVincolo 55

Dizionario dei Dati Tutti i DBMS relazionali gestiscono le descrizioni delle tabelle presenti nella basi di dati mediante una struttura relazionale, cioè mediante tabelle. La base di dati contiene due tipi di tabelle: Quelle contente i dati. Quelle contenente i metadati (dati che descrivono dati), dette il catalogo della base di dati oppure il dizionario dei dati. I comandi di definizione e modifica dello schema manipolano il dizionario dei dati. 56