Il linguaggio SQL: le basi

Похожие документы
Il linguaggio SQL: le basi. Versione elettronica: SQLa-basi.pdf

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

Il linguaggio SQL: query innestate

Il linguaggio SQL: DDL di base

Il linguaggio SQL: viste e tabelle derivate. Versione elettronica: SQLd-viste.pdf

Il linguaggio SQL: viste e tabelle derivate

Basi di Dati: Corso di laboratorio

Definizione di domini

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

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Linguaggio SQL. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Uso delle variabili di alias. SQL slide aggiuntive. Interrogazione 25. Interrogazione 26

Linguaggio SQL. Structured Query Language

Corso sul linguaggio SQL

Data Management Software. Il linguaggio SQL. Raggruppamenti. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management Marzo 2004

Gestione delle tabelle

Operazioni sui database

Lezione V. Aula Multimediale - sabato 29/03/2008

SQL (STRUCTURED QUERY LANGUAGE)

MAX, SUM, AVG, COUNT)

INFORMATICA GENERALE Prof. Alberto Postiglione. Scienze della Comunicazione Università di Salerno. INFORMATICA GENERALE Prof. Alberto Postiglione

SQL prima parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2011/12

DBMS (Data Base Management System)

Istruzioni DML di SQL

PROGRAMMA DI CLASSE 5AI

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

Giovanna Rosone 04/03/ /03/2010 SQL, Istruzioni per la modifica dello schema

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

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

SQL. Linguaggio di interrogazione per basi di dati relazionali. Relazione = tabella con attributi (a 1, a 2,, a n ): Funzionalità principali di SQL:

OR true null false true true true true null true null null false true null false NOT

Archivi e Basi di Dati

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

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

SQL - Tipi di dato Il linguaggio SQL

Query. Query (Interrogazioni) SQL SQL. Significato dell interrogazione. Sintassi

INDICI. Prevediamo di effettuare spesso interrogazioni simili alle seguenti:

IL LINGUAGGIO SQL IDENTIFICATORI E TIPI DI DATI COMANDI E ISTRUZIONI

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

Il Modello Relazionale

Corso di Informatica (Basi di Dati)

SQL: Concetti Base -Prima Parte-

Basi di dati. Il Modello Relazionale dei Dati. K. Donno - Il Modello Relazionale dei Dati

Vincoli di Integrità

I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due:

Basi di dati. L Algebra Relazionale. K. Donno - L Algebra Relazionale

User Tools: DataBase Manager

Informatica per le discipline umanistiche 2 lezione 10

Algebra Relazionale. algebra relazionale

SISTEMI INFORMATIVI AVANZATI -2010/ Introduzione

SQL IL LINGUAGGIO DI INTERROGAZIONE

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

Documentazione SQL. Argomento Sintassi Note Definizione schema create schema [NomeSchema] [[authorization] Autorizzazione] {DefElementoSchema}

Storia. Corso di Basi di Dati Spaziali. Componente DDL. Funzionalità. Esempio. Creazione di schema. Linguaggi: SQL. Storia:

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

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

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Introduzione all Algebra Relazionale

Corso di Laboratorio di Basi di Dati

Introduzione ai database relazionali

Corso di Informatica Generale 1 IN1. Linguaggio SQL

OSSIF WEB. Manuale query builder

Volumi di riferimento

2104 volume III Programmazione

Lo schema concettuale risultante dalla progettazione concettuale è l input alla fase di progettazione logica.

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf


SQL Sintassi Dei Comandi

MODELLO RELAZIONALE. cesarini-bdsi mod relazionale 1 MODELLO RELAZIONALE

SQL. Alcune note sulla definizione dei dati

Organizzazione degli archivi

Informatica. Sintassi. Interrogazioni in SQL. Significato dell interrogazione. Tabella Impiegato. Basi di dati parte 4 SQL

Basi di Dati Corso di Laura in Informatica Umanistica

Basi di dati e Sistemi informativi aziendali

Laboratorio di Basi di Dati e Web

Algebra Relazionale e Calcolo Relazionale. L. Vigliano

Basi di Dati prof. Letizia Tanca lucidi ispirati al libro Atzeni-Ceri-Paraboschi-Torlone. SQL: il DDL

Linguaggi per basi di dati

Dispensa di database Access

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

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

Elementi di Algebra Relazionale

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

Capitolo 13. Interrogare una base di dati

Il linguaggio SQL: trigger. Versione elettronica: 04.7.SQL.trigger.pdf

Il modello relazionale dei dati e stato introdotto da Codd. nel 1970 (E.F. Codd, \A relational model of data for large

Structured Query Language parte 1

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

Sistemi per la gestione di database: MySQL ( )

Corso di Basi di Dati A.A. 2013/2014

Introduzione. Elenco telefonico Conti correnti Catalogo libri di una biblioteca Orario dei treni aerei

UNIVERSITÀ DEGLI STUDI DI UDINE Facoltà di Medicina e Chirurgia CORSO DI LAUREA IN TECNICHE DI RADIOLOGIA MEDICA PER IMMAGINI E RADIOTERAPIA ESAME

SQL -DDL. FONDISTA(Nome, Nazione, Età) GAREGGIA(NomeFondista, NomeGara, Piazzamento) GARA(Nome, Luogo, Nazione, Lunghezza)

Транскрипт:

Il linguaggio SQL: le basi Sistemi Informativi L-A Home Page del corso: http://www-db.deis.unibo.it/courses/sil-a/ Versione elettronica: SQLa-basi.pdf Sistemi Informativi L-A

SQL: caratteristiche generali SQL (Structured Query Language) è il linguaggio standard de facto per DBMS relazionali, che riunisce in sé funzionalità di DDL, DML e DCL SQL è un linguaggio dichiarativo (non-procedurale), ovvero non specifica la sequenza di operazioni da compiere per ottenere il risultato SQL è relazionalmente completo, nel senso che ogni espressione dell algebra relazionale può essere tradotta in SQL inoltre SQL fa molte altre cose Il modello dei dati di SQL è basato su tabelle anziché relazioni: Possono essere presenti righe (tuple) duplicate In alcuni casi l ordine delle colonne (attributi) ha rilevanza il motivo è pragmatico (ossia legato a considerazioni sull efficienza) SQL adotta la logica a 3 valori introdotta con l Algebra Relazionale SQL - Basi Sistemi Informativi L-A 2

SQL: standard e dialetti Il processo di standardizzazione di SQL è iniziato nel 1986 Nel 1992 è stato definito lo standard SQL-2 (o SQL-92) da parte dell ISO (International Standards Organization), e dell ANSI (American National Standards Institute), rispettivamente descritti nei documenti ISO/IEC 9075:1992 e ANSI X3.135-1992 (identici!) Del 1999 è lo standard SQL:1999, che rende SQL un linguaggio computazionalmente completo (e quindi con istruzioni di controllo!) per il supporto di oggetti persistenti Allo stato attuale ogni sistema ha ancora un suo dialetto: supporta (in larga parte) SQL-2 ha già elementi di SQL:1999 ha anche costrutti non standard Quello che vediamo è la parte più diffusa SQL - Basi Sistemi Informativi L-A 3

Organizzazione del materiale La trattazione di SQL viene suddivisa in più parti come segue: DDL di base e DML per gli operatori dell algebra e per le operazioni di modifica dei dati Per fare quello che si fa anche in algebra DML per il raggruppamento dei dati Per derivare informazioni di sintesi dai dati DML con blocchi innestati Per scrivere richieste complesse DDL per la definizione di viste e vincoli generici Per migliorare la qualità dei dati Utilizzo di SQL da linguaggio ospite Per scrivere applicazioni SQL - Basi Sistemi Informativi L-A 4

Data Definition Language (DDL) Il DDL di SQL permette di definire schemi di relazioni (o table, tabelle), modificarli ed eliminarli Permette di inoltre di specificare vincoli, sia a livello di tupla (o riga ) che a livello di tabella Permette di definire nuovi domini, oltre a quelli predefiniti Per vincoli e domini si può anche fare uso del DML (quindi inizialmente non si trattano completamente) Inoltre si possono definire viste ( view ), ovvero tabelle virtuali, e indici, per accedere efficientemente ai dati (questi ultimi li vedremo in SI L-B) Per quanto non trattato nel seguito si faccia riferimento al materiale di laboratorio SQL - Basi Sistemi Informativi L-A 5

Creazione ed eliminazione di tabelle Mediante l istruzione CREATE TABLE si definisce lo schema di una tabella e se ne crea un istanza vuota Per ogni attributo va specificato il dominio, un eventuale valore di default e eventuali vincoli Infine possono essere espressi altri vincoli a livello di tabella Mediante l istruzione DROP TABLE è possibile eliminare lo schema di una tabella (e conseguentemente la corrispondente istanza) DROP TABLE Imp SQL - Basi Sistemi Informativi L-A 6

Definizione di tabelle: esempio CREATE TABLE Imp ( CodImp char(4) PRIMARY KEY, CF char(16) NOT NULL UNIQUE, -- chiave Cognome varchar(60) NOT NULL, ) Nome varchar(30) NOT NULL, Sede char(3) REFERENCES Sedi(Sede), -- FK Ruolo char(20) DEFAULT Programmatore, Stipendio int CHECK (Stipendio > 0), UNIQUE (Cognome, Nome) CREATE TABLE Prog ( CodProg char(3), Citta varchar(40), PRIMARY KEY (CodProg,Citta) ) -- chiave SQL - Basi Sistemi Informativi L-A 7

Valori nulli e valori di default Per vietare la presenza di valori nulli, è sufficiente imporre il vincolo NOT NULL CF char(16) NOT NULL, Per ogni attributo è inoltre possibile specificare un valore di default, che verrà usato se all atto dell inserimento di una tupla non viene fornito esplicitamente un valore per l attributo relativo Ruolo char(20) DEFAULT Programmatore SQL - Basi Sistemi Informativi L-A 8

Chiavi La definizione di una chiave avviene esprimendo un vincolo UNIQUE, che si può specificare in linea, se la chiave consiste di un singolo attributo CF char(16) UNIQUE, o dopo aver dichiarato tutti gli attributi, se la chiave consiste di uno o più attributi: UNIQUE(Cognome,Nome) Ovviamente, specificare sarebbe molto più restrittivo UNIQUE(Cognome), UNIQUE(Nome) SQL - Basi Sistemi Informativi L-A 9

Chiavi primarie La definizione della chiave primaria di una tabella avviene specificando un vincolo PRIMARY KEY, o in linea o come vincolo di tabella CodImp char(4) PRIMARY KEY PRIMARY KEY (CodProg,Citta) Va osservato che: La specifica di una chiave primaria non è obbligatoria Si può specificare al massimo una chiave primaria per tabella Non è necessario specificare NOT NULL per gli attributi della primary key In DB2 è necessario specificare il vincolo NOT NULL sia per definire chiavi sia per definire chiavi primarie! SQL - Basi Sistemi Informativi L-A 10

Chiavi straniere ( foreign key ) La definizione di una foreign key avviene specificando un vincolo FOREIGN KEY, e indicando quale chiave viene referenziata Sede char(3) REFERENCES Sedi(Sede) Ovvero FOREIGN KEY (Sede) REFERENCES Sedi(Sede) Nell esempio, Imp è detta tabella di riferimento e Sedi tabella di destinazione (analoga terminologia per gli attributi coinvolti) Le colonne di destinazione devono essere una chiave della tabella destinazione (non necessariamente la chiave primaria) Se si omettono gli attributi destinazione, vengono assunti quelli della chiave primaria Sede char(3) REFERENCES Sedi SQL - Basi Sistemi Informativi L-A 11

Vincoli generici ( check constraint ) Mediante la clausola CHECK è possibile esprimere vincoli di tupla arbitrari, sfruttando tutto il potere espressivo di SQL La sintassi è: CHECK (<condizione>) Il vincolo è violato se esiste almeno una tupla che rende falsa la <condizione>. Pertanto Stipendio int CHECK (Stipendio > 0), non permette tuple con stipendio negativo, ma ammette valori nulli per l attributo Stipendio Se CHECK viene espresso a livello di tabella (anziché nella definizione dell attributo) è possibile fare riferimento a più attributi della tabella stessa CHECK (ImportoLordo = Netto + Ritenute) In DB2 il CHECK può usare solo condizioni valutabili sulla singola tupla SQL - Basi Sistemi Informativi L-A 12

Vincoli con nomi A fini diagnostici (e di documentazione) è spesso utile sapere quale vincolo è stato violato a seguito di un azione sul DB A tale scopo è possibile associare dei nomi ai vincoli, ad esempio: Stipendio int CONSTRAINT StipendioPositivo CHECK (Stipendio > 0), CONSTRAINT ForeignKeySedi FOREIGN KEY (Sede) REFERENCES Sedi SQL - Basi Sistemi Informativi L-A 13

Modifica di tabelle Mediante l istruzione ALTER TABLE è possibile modificare lo schema di una tabella, in particolare: Aggiungendo attributi Aggiungendo o rimuovendo vincoli ALTER TABLE Imp ADD COLUMN Sesso char(1) CHECK (Sesso in ( M, F )) ADD CONSTRAINT StipendioMax CHECK (Stipendio < 4000) DROP CONSTRAINT StipendioPositivo DROP UNIQUE(Cognome,Nome); Se si aggiunge un attributo con vincolo NOT NULL, bisogna prevedere un valore di default, che il sistema assegnerà automaticamente a tutte le tuple già presenti ADD COLUMN Istruzione char(10) NOT NULL DEFAULT Laurea SQL - Basi Sistemi Informativi L-A 14

Data Manipulation Language (DML) Le istruzioni principali del DML di SQL sono SELECT INSERT DELETE UPDATE esegue interrogazioni (query) sul DB inserisce nuove tuple nel DB cancella tuple dal DB modifica tuple del DB INSERT può usare il risultato di una query per eseguire inserimenti multipli DELETE e UPDATE possono fare uso di condizioni per specificare le tuple da cancellare o modificare SQL - Basi Sistemi Informativi L-A 15

DB di riferimento per gli esempi Imp Sedi CodImp Nome Sede Ruolo Stipendio Sede Responsabile Citta E001 Rossi S01 Analista 2000 S01 Biondi Milano E002 Verdi S02 Sistemista 1500 S02 Mori Bologna E003 Bianchi S01 Programmatore 1000 S03 Fulvi Milano E004 Gialli S03 Programmatore 1000 E005 E006 E007 E008 Neri Grigi Violetti Aranci S02 S01 S01 S02 Analista Sistemista Programmatore Programmatore 2500 1100 1000 1200 Prog CodProg P01 P01 Citta Milano Bologna P02 Bologna SQL - Basi Sistemi Informativi L-A 16

L istruzione SELECT È l istruzione che permette di eseguire interrogazioni (query) sul DB La forma di base è: SELECT A1,A2,..,Am FROM R1,R2,..,Rn WHERE <condizione> ovvero: SELECT (o TARGET) list clausola FROM clausola WHERE (cosa si vuole come risultato) (da dove si prende) (che condizioni deve soddisfare) SQL - Basi Sistemi Informativi L-A 17

SELECT su singola tabella Codice, nome e ruolo dei dipendenti della sede S01 SELECT CodImp, Nome, Ruolo FROM Imp WHERE Sede = S01 CodImp E001 E003 Nome Rossi Bianchi Ruolo Analista Programmatore E006 Grigi Sistemista Si ottiene in questo modo: E007 La clausola FROM dice di prendere la tabella IMP Violetti Programmatore La clausola WHERE dice di prendere solo le tuple per cui Sede= S01 Infine, si estraggono i valori degli attributi (o colonne ) nella SELECT list Equivale a π CodImp,Nome,Ruolo (σ Sede = S01 (Imp)) SQL - Basi Sistemi Informativi L-A 18

SELECT senza proiezione Se si vogliono tutti gli attributi: SELECT CodImp, Nome, Sede, Ruolo, Stipendio FROM Imp WHERE Sede = S01 si può abbreviare con: SELECT * FROM Imp WHERE Sede = S01 SQL - Basi Sistemi Informativi L-A 19

SELECT senza condizione Se si vogliono tutte le tuple: SELECT CodImp, Nome, Ruolo FROM Imp Quindi SELECT * FROM Imp restituisce tutta l istanza di Imp SQL - Basi Sistemi Informativi L-A 20

Tabelle vs Relazioni Il risultato di una query SQL può contenere righe duplicate: SELECT Ruolo FROM Imp WHERE Sede = S01 Ruolo Analista Programmatore Sistemista Programmatore Per eliminarle si usa l opzione DISTINCT nella SELECT list SELECT DISTINCT Ruolo FROM Imp WHERE Sede = S01 Ruolo Analista Programmatore Sistemista SQL - Basi Sistemi Informativi L-A 21

Espressioni nella clausola SELECT La SELECT list può contenere non solo attributi, ma anche espressioni: SELECT CodImp, Stipendio*12 FROM Imp WHERE Sede = S01 CodImp E001 E003 E006 E007 24000 12000 13200 12000 Si noti che in questo caso la seconda colonna non ha un nome SQL - Basi Sistemi Informativi L-A 22

Ridenominazione delle colonne Ad ogni elemento della SELECT list è possibile associare un nome a piacere: SELECT CodImp AS Codice, Stipendio*12 AS StipendioAnnuo FROM Imp WHERE Sede = S01 Codice StipendioAnnuo E001 24000 E003 E006 E007 12000 13200 12000 La parola chiave AS può anche essere omessa: SELECT CodImp Codice,... SQL - Basi Sistemi Informativi L-A 23

Pseudonimi Per chiarezza, ogni nome di colonna può essere scritto prefissandolo con il nome della tabella: SELECT Imp.CodImp AS Codice, Imp.Stipendio*12 AS StipendioAnnuo FROM Imp WHERE Imp.Sede = S01 e si può anche usare uno pseudonimo (alias) in luogo del nome della tabella SELECT I.CodImp AS Codice, I.Stipendio*12 AS StipendioAnnuo FROM Imp I -- oppure Imp AS I WHERE I.Sede = S01 SQL - Basi Sistemi Informativi L-A 24

Operatore LIKE L operatore LIKE, mediante le wildcard _ (un carattere arbitrario) e % (una stringa arbitraria), permette di esprimere dei pattern su stringhe Nomi degli impiegati che finiscono con una i e hanno una i in seconda posizione SELECT Nome FROM Imp WHERE Nome LIKE _i%i Nome Bianchi Gialli Violetti SQL - Basi Sistemi Informativi L-A 25

Operatore BETWEEN L operatore BETWEEN permette di esprimere condizioni di appartenenza a un intervallo Nome e stipendio degli impiegati che hanno uno stipendio compreso tra 1300 e 2000 Euro (estremi inclusi) SELECT Nome, Stipendio FROM Imp WHERE Stipendio BETWEEN 1300 AND 2000 Nome Rossi Verdi Stipendio 2000 1500 SQL - Basi Sistemi Informativi L-A 26

Operatore IN L operatore IN permette di esprimere condizioni di appartenenza a un insieme Codici e sedi degli impiegati delle sedi S02 e S03 SELECT CodImp, Sede FROM Imp WHERE Sede IN ( S02, S03 ) Lo stesso risultato si ottiene scrivendo: CodImp E002 E004 E005 E008 Sede S02 S03 S02 S02 SELECT CodImp, Sede FROM Imp WHERE Sede = S02 OR Sede = S03 SQL - Basi Sistemi Informativi L-A 27

Valori nulli Il trattamento dei valori nulli si basa su quanto già visto in algebra relazionale, quindi SELECT CodImp FROM Imp Imp CodImp E001 Sede S01 Stipendio 2000 WHERE Stipendio > 1500 E002 S02 1500 OR Stipendio <= 1500 E003 S01 1000 E004 S03 NULL restituisce solo CodImp E001 E002 E003 E005 E005 E006 E007 E008 S02 S01 S01 S02 2500 NULL 1000 1200 E007 E008 SQL - Basi Sistemi Informativi L-A 28

Logica a 3 valori in SQL Nel caso di espressioni complesse, SQL ricorre alla logica a 3 valori: vero (V), falso (F) e sconosciuto (?) SELECT CodImp, Sede, Stipendio FROM Imp CodImp E001 Sede S01 Stipendio 2000 WHERE (Sede = S03 ) E004 S03 NULL OR (Stipendio > 1500) E005 S02 2500 Per verificare se un valore è NULL si usa l operatore IS NOT (A IS NULL) si scrive anche A IS NOT NULL SELECT CodImp FROM Imp WHERE Stipendio IS NULL CodImp E004 E006 SQL - Basi Sistemi Informativi L-A 29

Ordinamento del risultato Per ordinare il risultato di una query secondo i valori di una o più colonne si introduce la clausola ORDER BY, e per ogni colonna si specifica se l ordinamento è per valori ascendenti (ASC, il default) o discendenti (DESC) SELECT Nome, Stipendio FROM Imp ORDER BY Stipendio DESC, Nome Nome Neri Rossi Verdi Aranci Grigi Bianchi Gialli Violetti Stipendio 2500 2000 1500 1200 1100 1000 1000 1000 SQL - Basi Sistemi Informativi L-A 30

Interrogazioni su più tabelle L interrogazione SELECT I.Nome, I.Sede, S.Citta FROM Imp I, Sedi S WHERE I.Sede = S.Sede AND I.Ruolo = Programmatore si interpreta come segue: Si esegue il prodotto Cartesiano di Imp e Sedi Si applicano i predicati della clausola WHERE Si estraggono le colonne della SELECT list Il predicato I.Sede = S.Sede è detto predicato di join, in quanto stabilisce il criterio con cui le tuple di Imp e di Sedi devono essere combinate SQL - Basi Sistemi Informativi L-A 31

Interrogazioni su più tabelle: risultato Dopo avere applicato il predicato I.Sede = S.Sede: I.CodImp I.Nome I.Sede I.Ruolo I.Stipendio S.Sede S.Responsabile S.Citta E001 Rossi S01 Analista 2000 S01 Biondi Milano E002 Verdi S02 Sistemista 1500 S02 Mori Bologna E003 Bianchi S01 Programmatore 1000 S01 Biondi Milano E004 Gialli S03 Programmatore 1000 S03 Fulvi Milano E005 Neri S02 Analista 2500 S02 Mori Bologna E006 Grigi S01 Sistemista 1100 S01 Biondi Milano E007 Violetti S01 Programmatore 1000 S01 Biondi Milano E008 Aranci S02 Programmatore 1200 S02 Mori Bologna SQL - Basi Sistemi Informativi L-A 32

Ridenominazione del risultato Se la SELECT list contiene 2 o più colonne con lo stesso nome, è necessario operare una ridenominazione per ottenere un output con tutte le colonne intestate SELECT I.Sede AS SedeE001, S.Sede AS AltraSede FROM Imp I, Sedi S WHERE I.Sede <> S.Sede AND I.CodImp = E001 SedeE001 S01 S01 AltraSede S02 S03 SQL - Basi Sistemi Informativi L-A 33

Self Join L uso di alias è forzato quando si deve eseguire un self-join Chi sono i nonni di Anna? Genitori G1 Genitore Figlio Genitori G2 Genitore Figlio Luca Anna Luca Anna Maria Anna Maria Anna Giorgio Luca Giorgio Luca Silvia Maria Silvia Maria Enzo Maria Enzo Maria SELECT G1.Genitore AS Nonno FROM Genitori G1, Genitori G2 WHERE G1.Figlio = G2.Genitore AND G2.Figlio = Anna SQL - Basi Sistemi Informativi L-A 34

Join espliciti Anziché scrivere i predicati di join nella clausola WHERE, è possibile costruire una joined table direttamente nella clausola FROM SELECT I.Nome, I.Sede, S.Citta FROM Imp I JOIN Sedi S ON (I.Sede = S.Sede) WHERE I.Ruolo = Programmatore in cui JOIN si può anche scrivere INNER JOIN Altri tipi di join espliciti sono: LEFT [OUTER] JOIN RIGHT [OUTER] JOIN FULL [OUTER] JOIN NATURAL JOIN DB2 non supporta il join naturale SQL - Basi Sistemi Informativi L-A 35

Operatori insiemistici L istruzione SELECT non permette di eseguire unione, intersezione e differenza di tabelle Ciò che si può fare è combinare in modo opportuno i risultati di due istruzioni SELECT, mediante gli operatori UNION, INTERSECT, EXCEPT In tutti i casi gli elementi delle SELECT list devono avere tipi compatibili e gli stessi nomi se si vogliono colonne con un intestazione definita L ordine degli elementi è importante (notazione posizionale) Il risultato è in ogni caso privo di duplicati, per mantenerli occorre aggiungere l opzione ALL: UNION ALL, INTERSECT ALL, EXCEPT ALL SQL - Basi Sistemi Informativi L-A 36

Operatori insiemistici: esempi (1) R A 1 1 2 2 2 3 B a a a b c b S C 1 1 2 2 3 4 B a b a c c d SELECT A FROM R UNION 1 2 SELECT C 3 FROM S 4 SELECT B FROM R UNION ALL SELECT B FROM S B a a a b c b SELECT A FROM R UNION A SELECT C AS A 3 FROM S 4 1 2 SELECT A,B FROM R UNION SELECT B,C AS A FROM S Non corretta! a b a c c d SQL - Basi Sistemi Informativi L-A 37

Operatori insiemistici: esempi (2) R A B 1 1 a a SELECT B FROM R B a SELECT B FROM S B d 2 a INTERSECT b EXCEPT 2 2 b c SELECT B FROM S c SELECT B FROM R 3 b S C 1 1 2 2 B a b a c SELECT B FROM R INTERSECT ALL SELECT B FROM S B a a b c SELECT B FROM R EXCEPT ALL SELECT B FROM S B a b 3 c 4 d SQL - Basi Sistemi Informativi L-A 38

Istruzioni di aggiornamento dei dati Le istruzioni che permettono di aggiornare il DB sono INSERT DELETE UPDATE inserisce nuove tuple nel DB cancella tuple dal DB modifica tuple del DB INSERT può usare il risultato di una query per eseguire inserimenti multipli DELETE e UPDATE possono fare uso di condizioni per specificare le tuple da cancellare o modificare In ogni caso gli aggiornamenti riguardano una sola relazione SQL - Basi Sistemi Informativi L-A 39

Inserimento di tuple: caso singolo È possibile inserire una nuova tupla specificandone i valori INSERT INTO Sedi(Sede,Responsabile,Citta) VALUES ( S04, Bruni, Firenze ) Ci deve essere corrispondenza tra attributi e valori La lista degli attributi si può omettere, nel qual caso vale l ordine con cui sono stati definiti Se la lista non include tutti gli attributi, i restanti assumono valore NULL (se ammesso) o il valore di default (se specificato) INSERT INTO Sedi(Sede,Citta) -- sede senza responsabile VALUES ( S04, Firenze ) SQL - Basi Sistemi Informativi L-A 40

Inserimento di tuple: caso multiplo È possibile anche inserire le tuple che risultano da una query INSERT INTO SediBologna(SedeBO,Resp) SELECT Sede,Responsabile FROM Sedi WHERE Citta = Bologna Valgono ancora le regole viste per il caso singolo Gli schemi del risultato e della tabella in cui si inseriscono le tuple possono essere diversi, l importante è che i tipi delle colonne siano compatibili SQL - Basi Sistemi Informativi L-A 41

Cancellazione di tuple L istruzione DELETE può fare uso di una condizione per specificare le tuple da cancellare DELETE FROM Sedi -- elimina le sedi di Bologna WHERE Citta = Bologna Che succede se la cancellazione porta a violare il vincolo di integrità referenziale? (ad es.: che accade agli impiegati delle sedi di Bologna?) lo vediamo tra 2 minuti SQL - Basi Sistemi Informativi L-A 42

Modifica di tuple Anche l istruzione UPDATE può fare uso di una condizione per specificare le tuple da modificare e di espressioni per determinare i nuovi valori UPDATE Sedi SET Responsabile = Bruni, Citta = Firenze WHERE Sede = S01 UPDATE Imp SET Stipendio = 1.1*Stipendio WHERE Ruolo = Programmatore Anche l UPDATE può portare a violare il vincolo di integrità referenziale SQL - Basi Sistemi Informativi L-A 43

Politiche di reazione Anziché lasciare al programmatore il compito di garantire che a fronte di cancellazioni e modifiche i vincoli di integrità referenziale siano rispettati, si possono specificare opportune politiche di reazione in fase di definizione degli schemi CREATE TABLE Imp ( CodImp char(4) PRIMARY KEY, Sede... char(3), FOREIGN KEY Sede REFERENCES Sedi ON DELETE CASCADE -- cancellazione in cascata ON UPDATE NO ACTION -- modifiche non permesse Altre politiche: SET NULL e SET DEFAULT SQL - Basi Sistemi Informativi L-A 44

Riassumiamo: Il linguaggio SQL è lo standard de facto per interagire con DB relazionali Si discosta dal modello relazionale in quanto permette la presenza di tuple duplicate (tabelle anziché relazioni) La definizione delle tabelle permette di esprimere vincoli e anche di specificare politiche di reazione a fronte di violazioni dell integrità referenziale L istruzione SELECT consiste nella sua forma base di 3 parti: SELECT, FROM e WHERE A queste si aggiunge ORDER BY, per ordinare il risultato (e altre che vedremo) Per trattare i valori nulli, SQL ricorre a una logica a 3 valori (vero, falso e sconosciuto) SQL - Basi Sistemi Informativi L-A 45