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

SQL. SQL: una visione panoramica. SQL: "storia" Definizione dei dati

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

SQL /10/2016 Basi di dati - SQL 1

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

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

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

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

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

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

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

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

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

Basi di dati. SQL: concetti base

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

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

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

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

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

Laboratorio di Basi di Dati e Multimedia

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

Laboratorio di Basi di Dati

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

Operazioni su insiemi: unione, intersezione e differenza

Parte IV Il linguaggio SQL

Viste come strumenti di programmazione

Interpretazione delle query nidificate

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

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

SQL - Structured Query Language

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

Structured Query Language

Stringhe di caratteri

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

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

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

SQL-DML/3. 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.1 Data Description Language - 1

Esercitazione: Interrogazioni SQL

Interrogazioni. L istruzione base per le interrogazioni è select

Esercizi di Informatica Documentale

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

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

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

Gestione dei valori nulli

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

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

PRODOTTO CARTESIANO Caso Generale

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 Laurea in Ingegneria Informatica Fondamenti di Informatica II Modulo Basi di dati a.a

Vincoli interrelazionali

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

BASI di DATI. SQL: concetti fondamentali

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

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

Basi di Dati: Corso di laboratorio

Corso sul linguaggio SQL

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

Sistemi di Elaborazione delle Informazioni

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"

Corso di Basi di Dati

SQL operazioni sui dati: interrogazioni con join e prodotti cartesiano

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

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

Linguaggi per basi di dati e SQL

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

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

Corso di Informatica Linguaggio SQL prima parte

Il linguaggio SQL - Interrogazioni -

Basi di Dati SQL-92. Concetti Fondamentali

Esercizi di Informatica Documentale

Corso sul linguaggio SQL

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

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

Laboratorio di Basi di Dati

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

Manuale SQL. Manuale SQL - 1 -

Operatori aggregati: COUNT

Operatori aggregati: COUNT

Laboratorio di Basi di Dati

Viste (relazioni derivate)

SQL. Dott.ssa Elisa Quintarelli

Uno dei principali motivi del successo delle basi di dati: è diventato uno standard

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

SQL. Lezione 1. Docente: Alberto Belussi

Aggiornamenti e Interrogazioni

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)

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

Interrogazioni nidificate

Transcript:

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

SQL: "storia" 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, ISO(1986, ancora 1989 e infine 1992, SQL-2) SQL:1999 o SQL-3 3 non è ancora completamente adottato Un linguaggio completo SQL permette di svolgere sia Operazioni di definizione schemi mediante i costrutti CREATE, sia Operazioni di modifica dati mediante i costrutti INSERT, DELETE, UPDATE e modifica schemi mediante i costrutti ALTER e DROP, sia Operazioni di interrogazione mediante il costrutto SELECT 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 Dipart) ) REFERENCES Dipartimento(NomeDip 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 Dipart) ) REFERENCES Dipartimento(NomeDip 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 ) 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. 10

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. 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 ) 11

Structured Query Language (SQL): DM Operazioni di aggiornamento inserimento: insert eliminazione: delete modifica: update di una o più ennuple di una relazione 12

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 Sia data la tabella Persone Un primo esempio 13

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 WHERE Padre NOT IN (SELECT Nome FROM Persone) 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 14

Eliminazione DELETE FROM Tabella [ WHERE Condizione ] la condizione può coinvolgere anche altre relazioni Esempi DELETE FROM Persone WHERE Eta < 35 DELETE FROM Paternità WHERE Figlio NOT IN ( SELECT Nome FROM Persone) DELETE FROM Paternità 15

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 Modifica UPDATE Tabella SET Attributo = < Espressione SELECT NULL DEFAULT > [ WHERE Condizione ] 16

Esempi UPDATE Persone SET Reddito = 45 WHERE Nome = 'Piero' UPDATE Persone SET Reddito = Reddito * 1.1 WHERE Eta < 30 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 17

Esercizio 1b Spiegare inoltre quale è l effetto dell'esecuzione dei seguenti comandi di aggiornamento: delete from AUTORE where Cognome = 'Rossi' update LIBRO set NomeAutore= 'Umberto' where CognomeAutore = 'Eco' 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". 18

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. 19

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; 20

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 Abbreviazione select p.nome as nome, p.reddito as reddito from persone as p where p.eta < 30 21

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) Esecuzione SELECT Reddito FROM Persone WHERE Eta < 30 SELECT DISTINCT Reddito FROM Persone WHERE Eta < 30 Reddito 15 21 30 21 Reddito 15 21 30 22

Altre 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 Costrutto BETWEEN... AND L operatore BETWEEN... AND seleziona un intervallo di dati tra due valori (estremi inclusi). Tali valori possono essere: Numeri Testo Date 23

Con BETWEEN Esempio SELECT Nome, Reddito FROM Persone WHERE Reddito > 25 AND Eta BETWEEN 30 AND 60... oppure senza SELECT Nome, Reddito FROM Persone WHERE Reddito > 25 AND Eta >= 30 AND Eta <= 60 Maternità Paternità 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 Età 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 48 24

Risultato ordinato I risultati di una query possono essere ordinati utilizzando la clausola ORDER BY Esempio SELECT * FROM Persone ORDER BY Eta Ordina le persone dalla più giovane alla più vecchia Criteri possono essere specificati, ad es. si può anche ordinare in ordine decrescente Più criteri SELECT * FROM Persone ORDER BY Eta, Nome Ordina le persone dalla più giovane alla più vecchia. A parità di età vengono ordinate alfabeticamente per nome Ordine decrescente SELECT * FROM Persone ORDER BY Eta DESC, Nome Ordina le persone dalla più vecchia alla più giovane. A parità di età vengono ordinate alfabeticamente per nome 25

Confronti con il testo: operatore LIKE L operatore LIKE serve per esprimere l operazione di pattern matching su stringhe. permette di indicare i caratteri (o gruppi di caratteri) che devono essere contenuti in una stringa: - indica un singolo carattere non specificato % indica un gruppo di caratteri non specificato Esempi Se scrivo Nome LIKE %o la condizione vale vero per i nomi che terminano per o Se scrivo Nome LIKE la condizione vale vero per i nomi composti di 4 lettere Esercizio Scrivere una query che produca come risultato nome, età e reddito delle persone che hanno un nome che inizia per Z ed anche una z come terza lettera. 26

Soluzione SELECT * FROM Persone WHERE Nome LIKE Z_z% 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). 27

I valori NULL Elenco delle matricole degli impiegati con età superiore ai 40 SELECT Matricola FROM Impiegati WHERE Eta > 40 Risultato? Se invece chiedo le matricole degli impiegati con età che potrebbe essere maggiore di 40 28

SELECT Matricola FROM Impiegati WHERE Eta > 40 OR Eta IS NULL Risultato? 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 58 29

Composizione di più tabelle Esercizio Elencare i padri di persone che guadagnano più di 20 select distinct padre from persone, paternita where figlio=nome and reddito>20 30

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 SELECT con clausola join SELECT FROM Tabella { JOIN Tabella ON CondDiJoin }, [ WHERE AltraCondizione ] 31

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 63 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 32

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 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 33

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 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 p.figlio = m.figlio on outer e' opzionale select p.figlio, padre, madre from paternita p left join maternita m on p.figlio = m.figlio 34

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? Operatori insiemistici 35

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 dalle proiezioni! N.B. Le due relazioni non devono avere necessariamente lo stesso schema (basta che i tipi degli attributi siano uguali) 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 36

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 Notazione posizionale, 2 Anche con le ridenominazioni non cambia niente: select padre as genitore, figlio from paternita union select figlio, madre as genitore from maternita Corretta: select padre as genitore, figlio from paternita union select madre as genitore, figlio from maternita 37

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 38

Nota bene Intersezione e differenza non sono operatori primitivi, l unione l sìs Qual è il motivo? 39