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

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

SQL: "storia" 31/05/2006 2

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. SQL: una visione panoramica. SQL: "storia" Definizione dei dati

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

SQL /10/2016 Basi di dati - SQL 1

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

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

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

SQL Esempi. 24/10-7/11/2016 Basi di dati - SQL 1

Basi di dati. SQL: concetti base

SQL Esempi /10/2017 Basi di dati - SQL 1

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

Corso di Laurea in Ingegneria Informatica Algoritmi e basi di dati Modulo Basi di dati a.a

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

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

Figlio Maria. Luigi. Olga Filippo Andrea Aldo Figlio Franco Olga Filippo Andrea Aldo

Laboratorio di Basi di Dati e Multimedia

Join esplicito. SELECT con join esplicito, sintassi. Ulteriore estensione: join naturale (meno diffuso) Outer join. Join esterno: "outer join"

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

Viste come strumenti di programmazione

Parte IV Il linguaggio SQL

Interpretazione delle query nidificate

Laboratorio di Basi di Dati

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

SQL Matteo Magnani, Danilo Montesi Università di Bologna SQL. SQL come Data Manipulation Language - (SELECT FROM WHERE ORDER BY)

Argomenti della lezione. Interrogazioni complesse in SQL join esplicito outer join operatori aggregati interrogazioni nidificate

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

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

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

Stringhe di caratteri

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

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

Operazioni su insiemi: unione, intersezione e differenza

SQL-DML/3. Basi di Dati. Prof. Alfredo Cuzzocrea Università degli Studi di Trieste

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

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

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

SQL - Structured Query Language

SQL. Argomenti della lezione. Join esplicito. Interrogazioni complesse in SQL join esplicito outer join operatori aggregati interrogazioni nidificate

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

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

E. Giunchiglia Basi di dati 1 (trasparenze basate su Atzeni, Ceri, Paraboschi, Torlone: Basi di dati, Capitolo 4) SQL SQL. Definizione dei dati in SQL

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

Esercizi di Informatica Documentale

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

Interrogazioni. L istruzione base per le interrogazioni è select

Esercitazione: Interrogazioni SQL

Structured Query Language

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

Corso di Basi di Dati

Sistemi di Elaborazione delle Informazioni

SQL. Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL. Definizione dei dati in SQL. SQL: "storia" Domini

Corso sul linguaggio SQL

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL. Definizione dei dati in SQL. SQL: "storia" Domini. CREATE TABLE, esempio

SQL. Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL. Definizione dei dati in SQL. SQL: "storia" Domini

E possibile ordinare le righe del risultato di una interrogazione attraverso la clausola order by, a chiusura di una interrogazione.

BASI di DATI. SQL: concetti fondamentali

SQL operazioni sui dati: interrogazioni con join e prodotti cartesiano

SQL. Definizione dei da6 in SQL. SQL: "storia" CREATE TABLE: esempio. CREATE TABLE: esempio

Gestione dei valori nulli

Laboratorio di Basi di Dati

Vincoli interrelazionali

PRODOTTO CARTESIANO Caso Generale

SQL. Università degli Studi di Salerno. Corso di Laurea in Scienze della Comunicazione Informatica generale (matr. Dispari) Docente: Angela Peduto

Basi di Dati. Concetti Fondamentali SQL-92 25/02/2004. Concetti Fondamentali. Introduzione. Interrogazioni. Creazione ed eliminazione di bd

SQL. Lezione 1. Docente: Alberto Belussi

Corso di Informatica Linguaggio SQL prima parte

Linguaggi per basi di dati e SQL

SQL. Dott.ssa Elisa Quintarelli

Linguaggi per basi di dati. Linguaggi per basi di dati e SQL. Linguaggi di interrogazione per basi di dati relazionali. Linguaggi di interrogazione

Gestione e Analisi dei Dati. Lezione 2 Vincoli su attributo Selezioni semplici su una tabella

Basi di Dati SQL-92. Concetti Fondamentali

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

Elementi di Informatica LB Basi di Dati. Anno accademico 2007/2008 Prof. Stefano Contadini

Viste (relazioni derivate)

Interrogazioni nidificate

Dichiarazione degli schemi in SQL DDL 1

Operatori aggregati: COUNT

Operatori aggregati: COUNT

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

Università di Roma La Sapienza Laurea in Ingegneria Informatica. Basi di Dati. Anno Accademico 2003/2004 Canale M-Z.

SQL. SQL: "storia. Sviluppato nella metà degli anni settanta (1974) presso il laboratorio di ricerca IBM di S.Josè. Dal 1983 ca. "standard di fatto"

Esercizi di Informatica Documentale

Aggiornamenti e Interrogazioni

SQL Matteo Magnani, Danilo Montesi Università di Bologna SQL. SQL come Data Manipulation Language - Funzioni Aggregate e GROUP BY

Operatori aggregati. Operatori aggregati. Interrogazioni con raggruppamento. Interrogazioni con raggruppamento

Basi di Dati: Corso di laboratorio

Il linguaggio SQL. Il linguaggio SQL

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL

Trasparenze rielaborate da Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1999 Capitolo 4: SQL-2, seconda parte.

Il linguaggio SQL - Interrogazioni -

Manuale SQL. Manuale SQL - 1 -

Structured. Language. Basi di Dati. Introduzione. DDL: Data Definition Language. Tipi di dato. Query. Modifica dei Dati

Transcript:

Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica II Modulo Basi di dati a.a. 2013-2014 Docente: Gigliola Vaglini Docente laboratorio: Francesco Pistolesi Lezione 3 Structured Query Language (SQL): DD 1

SQL: "storia" prima proposta SEQUEL (1974); originariamente "Structured Query Language", ora "nome proprio ; prime implementazioni in SQL/DS e Oracle (1981) dal 1983 ca. "standard di fatto" poi standard ANSI-ISO(1986, ancora 1989 e infine 1992, SQL-2) SQL:1999 o SQL-3 non è ancora completamente adottato Un linguaggio completo SQL permette di svolgere sia Operazioni di definizione schemi mediante i costrutti CREATE, Operazioni di interrogazione mediante il costrutto SELECT Operazioni di modifica dati mediante i costrutti INSERT, DELETE, UPDATE e modifica schemi mediante i costrutti ALTER e DROP, sia 2

Definizione dei dati in SQL Istruzione CREATE TABLE: definisce uno schema di relazione e ne crea un istanza vuota specifica attributi, domini e vincoli Domini Domini elementari (predefiniti) Domini definiti dall'utente (semplici, ma riutilizzabili) 3

Domini elementari Caratteri: singoli caratteri o stringhe, anche di lunghezza variabile Bit: singoli booleani o stringhe Numerici, esatti e approssimati Data, ora, intervalli di tempo Introdotti in SQL:1999: Boolean BLOB, CLOB (binary/character large object): per grandi immagini e testi Definizione da utente di domini Istruzione CREATE DOMAIN: definisce un dominio (semplice), utilizzabile in definizioni di relazioni, anche con vincoli e valori di default 4

CREATE DOMAIN, esempio CREATE DOMAIN Voto AS SMALLINT DEFAULT NULL CHECK ( value >=18 AND value <= 30 ) CREATE TABLE (1) CREATE TABLE Impiegato( Matricola CHAR(6) PRIMARY KEY, Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, Dipart CHAR(15), Stipendio NUMERIC(9) DEFAULT 0, FOREIGN KEY(Dipart) REFERENCES Dipartimento(NomeDip), UNIQUE (Cognome,Nome) ) 5

Vincoli intrarelazionali NOT NULL UNIQUE definisce chiavi PRIMARY KEY: chiave primaria (una sola, implica NOT NULL) UNIQUE e PRIMARY KEY due forme nella definizione di un attributo, se forma da solo la chiave come elemento separato 6

Definizioni alternative Matricola CHAR(6) PRIMARY KEY Matricola CHAR(6),, PRIMARY KEY (Matricola) CREATE TABLE (1) CREATE TABLE Impiegato( Matricola CHAR(6) PRIMARY KEY, Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, Dipart CHAR(15), Stipendio NUMERIC(9) DEFAULT 0, FOREIGN KEY(Dipart) REFERENCES Dipartimento(NomeDip), UNIQUE (Cognome,Nome) ) 7

Chiavi su più attributi Nome CHAR(20) NOT NULL, Cognome CHAR(20) NOT NULL, UNIQUE (Cognome,Nome), Nome Cognome CHAR(20) NOT NULL UNIQUE, CHAR(20) NOT NULL UNIQUE, Non è la stessa cosa! Vincoli interrelazionali REFERENCES e FOREIGN KEY permettono di definire vincoli di integrità referenziale di nuovo due sintassi per singoli attributi su più attributi E' possibile definire politiche di reazione alla violazione 8

9 Matricola 3987 3295 9345 Vigili Cognome Rossi Neri Neri Nome Luca Piero Mario Mori Gino 7543 Infrazioni Codice 34321 73321 64521 53524 Data 1/2/95 4/3/95 5/4/96 5/2/98 Vigile 3987 3295 3295 9345 Prov Numero MI TO PR PR 39548K E39548 839548 839548 Auto Prov Numero MI TO PR 39548K E39548 839548 Cognome Rossi Rossi Neri Nome Mario Mario Luca

CREATE TABLE (2) CREATE TABLE Infrazioni( Codice CHAR(6) PRIMARY KEY, Data DATE NOT NULL, Vigile INTEGER NOT NULL REFERENCES Vigili(Matricola), Provincia CHAR(2), Numero CHAR(6), FOREIGN KEY(Provincia, Numero) REFERENCES Auto(Provincia, Numero) ON DELETE SET NULL ON UPDATE CASCADE ) Structured Query Language (SQL): DM 10

Operazioni di lettura (interrogazione) Si esaminano 1 o più relazioni e si produce una nuova relazione Costrutto SELECT SELECT At t r i b u t o 1, At t r i b u t o 2,... FROM Tabella1, Tabella2,... [ WHERE condizione ] SELECT indica quali attributi produrre in uscita FROM indica quali tabelle utilizzare per produrre il risultato WHERE permette di indicare le condizioni che devono essere rispettate dalle tuple. Più condizioni possono essere composte usando gli operatori logici AND, OR, NOT. Se non ci sono condizioni da imporre, la clausola WHERE può essere omessa. 11

Un primo esempio Sia data la tabella Persone Progettare una query che produca come risultato nome e reddito delle persone con meno di trenta anni Soluzione SELECT Nome,Reddito FROM Persone WHERE Età < 30; 12

Ridenominazione I campi del risultato e le tabelle possono essere rinominate (temporaneamente) nella query utilizzando l operatore AS Sarà soprattutto utile con query complesse (Più volte la stessa tabella o campi dallo stesso nome in tabelle diverse) SELECT X. Att1, Y. Att4 FROM Tabella AS X, Tabella AS Y WHERE X. Att2 = Y. Att3 Esecuzione del select SQL non elimina i duplicati nel risultato (operazione costosa), va chiesto esplicitamente I duplicati possono essere eliminati utilizzando il costrutto DISTINCT I duplicati vengono eliminati dal risultato (solo dopo che la query ha prodotto il risultato) 13

Esecuzione SELECT Reddito FROM Persone WHERE Eta < 30 Reddito 15 21 30 21 SELECT DISTINCT Reddito FROM Persone WHERE Eta < 30 Reddito 15 21 30 Abbreviazioni Per visualizzare tutti gli attributi delle tabelle contenute nella clausola FROM si può usare il carattere * SELECT Nome, Eta, Reddito FROM Persone WHERE Eta < 30 SELECT * FROM Persone WHERE Eta < 30 14

Espressioni nella Target List select Reddito/2 as redditosemestrale from Persone where Nome = 'Luigi' Si possono introdurre all interno della clausola SELECT alcune espressioni (somma, moltiplicazione, sottrazione, divisione). I valori NULL Elenco delle matricole degli impiegati con età superiore ai 40 15

SELECT Matricola FROM Impiegati WHERE Eta > 40 Risultato? Se invece chiedo le matricole degli impiegati con età che potrebbe essere maggiore di 40 (o che non è sicuramente minore o uguale di 40) SELECT Matricola FROM Impiegati WHERE Eta > 40 OR Eta IS NULL Risultato? 16

Composizione di più tabelle Maternita Paternita Madre Luisa Luisa Anna Anna Maria Maria Padre Sergio Luigi Luigi Franco Franco Figlio Maria Luigi Olga Filippo Andrea Aldo Figlio Franco Olga Filippo Andrea Aldo Persone Nome Eta Andrea 27 Aldo 25 Maria 55 Anna 50 Filippo 26 Luigi 50 Franco 60 Olga 30 Sergio 85 Luisa 75 Reddito 21 15 42 35 30 40 20 41 35 87 34 17

Esercizio Elencare i padri di persone che guadagnano più di 20 select distinct padre from persone, paternita where figlio=nome and reddito>20 Esercizio Elencare le persone che guadagnano più dei rispettivi padri; mostrarne nome, reddito e anche il reddito del padre select f.nome, f.reddito, p.reddito from persone p, paternita, persone f where p.nome = padre and figlio = f.nome and f.reddito > p.reddito 18

SELECT con clausola join SELECT FROM Tabella { JOIN Tabella ON CondDiJoin }, [ WHERE AltraCondizione ] Maternita Paternita Madre Luisa Luisa Anna Anna Maria Maria Padre Sergio Luigi Luigi Franco Franco Figlio Maria Luigi Olga Filippo Andrea Aldo Figlio Franco Olga Filippo Andrea Aldo Persone Nome Eta Andrea 27 Aldo 25 Maria 55 Anna 50 Filippo 26 Luigi 50 Franco 60 Olga 30 Sergio 85 Luisa 75 Reddito 21 15 42 35 30 40 20 41 35 87 38 19

Soluzione con Join Elencare i nomi delle persone di cui sono noti il padre e la madre select p.figlio, padre, madre from maternita as m, paternita as p where p.figlio = m.figlio select p.figlio, padre, madre from maternita as m join paternita as p on p.figlio = m.figlio Commenti Ci sarà un vincolo di integrità referenziale tra l attributo Figlio in Paternita e Maternita e la chiave primaria Nome di Persone Non è detto che tutte le persone stiano anche nelle tabelle Paternita e Maternita Nel risultato ci stanno solo le persone di cui sono noti il padre e la madre Perché ON e non WHERE 20

Le persone che guadagnano più dei rispettivi padri; mostrare nome, reddito e reddito del padre select f.nome, f.reddito, p.reddito from persone p, paternita, persone f where p.nome = padre and figlio = f.nome and f.reddito > p.reddito select f.nome, f.reddito, p.reddito from (persone p join paternita on p.nome = padre) join persone f on figlio = f.nome where f.reddito > p.reddito join naturale select p.figlio, padre, madre from maternita m join paternita p on p.figlio = m.figlio Devo dire che attributo figlio voglio! select madre, figlio, padre from maternita natural join paternita 21

Join esterno: "outer join" Elencare ogni persona, suo padre e sua madre, dove il padre della persona è noto e la madre può essere nota o no. select p.figlio, padre, madre from paternita p left outer join maternita m on p.figlio = m.figlio outer e' opzionale select p.figlio, padre, madre from paternita p left join maternita m on p.figlio = m.figlio Differenze select p.figlio, padre, madre from maternita m join paternita p on m.figlio = p.figlio select p.figlio, padre, madre from maternita left join paternita on m.figlio = p.figlio select p.figlio, padre, madre from maternita full join paternita on m.figlio = p.figlio Che cosa si ottiene? 22

Operatori insiemistici Unione La select non permette di fare unioni; serve un costrutto esplicito: select union [all] select... i duplicati vengono eliminati (a meno che si usi all); anche dai risultati delle select! N.B. Le due relazioni non devono avere necessariamente lo stesso schema (basta che i tipi degli attributi siano uguali) 23

Schema del risultato select padre, figlio from paternita union select madre, figlio from maternita quali nomi per gli attributi del risultato? quelli del primo operando Notazione posizionale: attenzione all ordine degli attributi select padre, figlio from paternita union select figlio, madre from maternita select padre, figlio from paternita union select madre, figlio from maternita 24

select Nome from Persone except select Padre as Nome from Paternita Differenza vedremo che si può esprimere in altro modo (select annidate) select Nome from Persone intersect select Padre as Nome from Paternita Intersezione equivale a select Nome from Persone, Paternita where Nome = Padre 25

Nota bene Intersezione e differenza non sono operatori primitivi, l unione sì Qual è il motivo? Structured Query Language (SQL): DD ancora 26

Modifiche degli schemi ALTER DOMAIN ALTER TABLE Si possono aggiungere o rimuovere vincoli, modificare i valori di default. Si possono aggiungere ed eliminare attributi e vincoli sullo schema di una tabella. DROP DOMAIN DROP TABLE Si possono rimuovere componenti: schemi, tabelle, domini, viste. Structured Query Language (SQL): DM 27

Operazioni di aggiornamento inserimento: insert eliminazione: delete modifica: update di una o più ennuple di una relazione Inserimento insert into Tabella [ ( Attributi ) ] values ( Valori ) Si possono inserire righe all interno della tabella composte dai valori elencati nella clausola VALUES Si possono inserire insiemi di righe estratti dalla base di dati 28

Sia data la tabella Persone Un primo esempio Esempi di inserimento INSERT INTO Persone(Nome, Età, Reddito) VALUES( Mario,25,52) INSERT INTO Persone VALUES ('Mario',52, 25) INSERT INTO Persone(Nome, Reddito) VALUES('Lino',55) INSERT INTO Persone ( Nome ) SELECT Padre FROM Paternita 29

Inserimento, commenti l ordinamento degli attributi (se presenti) e dei valori è significativo le due liste debbono avere lo stesso numero di elementi se la lista di attributi è omessa, si fa riferimento a tutti gli attributi della relazione, secondo l ordine con cui sono stati definiti se la lista di attributi non contiene tutti gli attributi della relazione, per gli altri viene inserito un valore nullo (che deve essere permesso) o un valore di default Eliminazione DELETE FROM Tabella [ WHERE Condizione ] la condizione può coinvolgere anche altre relazioni 30

Esempi DELETE FROM Persone WHERE Eta < 35 DELETE FROM Paternità Eliminazione, commenti elimina le ennuple che soddisfano la condizione può causare (se i vincoli di integrità referenziale sono definiti con politiche di reazione cascade) eliminazioni in altre relazioni se la where viene omessa, si intende where true, cioe tutte le ennuple vengono eliminate N.B. delete from r non è la stessa cosa di drop r 31

Modifica UPDATE Tabella SET Attributo = < Espressione SELECT NULL DEFAULT > [ WHERE Condizione ] Esempi UPDATE Persone SET Reddito = 45 WHERE Nome = 'Piero' UPDATE Persone SET Reddito = Reddito * 1.1 WHERE Eta < 30 32

Modifica, commenti Aggiorna uno o più attributi di ennuple che soddisfano la condizione Se la where viene omessa, si intende where true, cioè tutte le ennuple vengono modificate Il valore a cui viene posto l attributo può essere il risultato di un espressione che si riferisce anche al valore corrente dell attributo Esercizio 1a Dare le definizioni SQL delle tabelle AUTORE (Nome, Cognome, DataNascita, Nazionalità) LIBRO (TitoloLibro, NomeAutore, CognomeAutore, Lingua) Per il vincolo foreign key specificare una politica di cascade sulle cancellazioni e di set null sulle modifiche. 33

Soluzione Create table AUTORE ( Nome character(20), Cognome character(20), DataNascita date, Nazionalità character(20), primary key(nome, Cognome) ) Create table LIBRO ( TitoloLibro character(30) primary key, NomeAutore character(20), CognomeAutore character(20), Lingua character(20), foreign key (NomeAutore, CognomeAutore) references AUTORE(Nome, Cognome) on delete cascade on update set NULL ) Esercizio 1b Spiegare quale è l effetto dell'esecuzione dei seguenti comandi di aggiornamento: delete from AUTORE where Cognome = 'Rossi' update LIBRO set NomeAutore= 'Umberto' where CognomeAutore = 'Eco' 34

Soluzione Il comando cancella dalla tabella AUTORE tutte le tuple con Cognome = 'Rossi'. A causa della politica cascade, anche tutte le tuple di LIBRO con CognomeAutore = 'Rossi' vengono eliminate. Il comando causa una violazione a meno che la tabella AUTORE contenga la tupla "Umberto Eco". 35