Il linguaggio SQL: le basi

Documenti analoghi
Il linguaggio SQL: le basi

Il linguaggio SQL: le basi. Versione elettronica: SQLa-basi.pdf

Il linguaggio SQL: query innestate

Il linguaggio SQL: raggruppamenti. Versione elettronica: SQLb-gruppi.pdf

Il linguaggio SQL: DML di base. Versione elettronica: 04.2.SQL.DMLbase.pdf

Il linguaggio SQL: DML di base

Basi di Dati: Corso di laboratorio

Il linguaggio SQL: DDL di base

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

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

Data Management Software. Il linguaggio SQL. Query Innestate. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management 10 Settembre 2003

Basi di Dati: Corso di laboratorio

Il linguaggio SQL: viste e tabelle derivate. DB di riferimento per gli esempi

Interrogazioni in SQL

Il linguaggio SQL: query innestate

MAX, SUM, AVG, COUNT)

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

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"

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

SQL (STRUCTURED QUERY LANGUAGE)

Esercizi svolti a lezione

Il linguaggio SQL. Evoluzione del linguaggio. I linguaggi dentro SQL. I dialeu SQL. U@lizzo di SQL SQL. A. Ferrari 1

Il linguaggio SQL: viste e tabelle derivate

SQL e algebra relazionale

Manuale SQL. Manuale SQL - 1 -

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

Laboratorio di Basi di Dati

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

SQL. Structured Query Language 1974: SEQUEL by IBM 1981: SQL by IBM : SQL ISO 9075:1992 SQL:1999 SQL:2003

Laboratorio di Basi di Dati

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

Algebra Relazionale. Operazioni nel Modello Relazionale

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

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

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

Soluzione esercitazione 01

SQL: Concetti Base -Prima Parte-

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

SQL - Structured Query Language

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

SQL (STRUCTURED QUERY LANGUAGE)

Caratteristiche dei linguaggi per Database

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

Interrogare una base di dati: algebra relazionale e SQL. Savino Castagnozzi Giorgio Macauda Michele Meomartino Salvatore Picerno Massimiliano Sartor

SQL: DDL, VI, Aggiornamenti e Viste

SUGLI INSIEMI. 1.Insiemi e operazioni su di essi

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

SPAZI VETTORIALI. 1. Spazi e sottospazi vettoriali

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

George Boole ( )

Definizione di domini


Prova Scritta di Basi di Dati

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

DATABASE PER IL WEB. Programmazione Web 1

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

Sommario. Introduzione... 13

Basi di Dati e Sistemi Informativi. Structured Query Language

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

Basi di dati 8 settembre 2015 Esame Compito A Tempo a disposizione: due ore. Libri chiusi.

SQL e ACCESS. Modello relazionale PROBLEMA ENTITA STUDENTE

Capitolo 4. Soluzione: Soluzione: Create domain STRING as character varying (256) default sconosciuto not null

Esercitazione 3 SQL 2

Istruzioni DML di SQL

Basi di Dati: Corso di laboratorio

IL CALCOLO LETTERALE: I MONOMI Conoscenze. per a = - 2 vale:

PROGRAMMA DI CLASSE 5AI

Aniello Murano NP- Completezza (seconda parte)

Interrogazioni nidificate

INTEGRALI IMPROPRI. f(x) dx. e la funzione f(x) si dice integrabile in senso improprio su (a, b]. Se tale limite esiste ma

Basi di Dati: Corso di laboratorio

Capitolo 5. Integrali. 5.1 Integrali di funzioni a gradinata

IL CALCOLO LETTERALE: I MONOMI Conoscenze. per a = - 2 vale:

LABORATORIO di INFORMATICA

B8. Equazioni di secondo grado

Laurea triennale in Scienze della Natura a.a. 2009/2010. Regole di Calcolo

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

Valutazione di una espressione. Espressioni. Espressioni semplici: variabili. Espressioni semplici: costanti

Unità D1.2 Selezione e proiezione

DBMS (Data Base Management System)

SQL Sintassi Dei Comandi

Funzioni razionali fratte

Esercitazione: Interrogazioni SQL

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

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

Structured Query Language

Vincoli di Integrità

ESERCIZI SQL. Esercizio 1

Dichiarazione degli schemi in SQL DDL 1

IL LINGUAGGIO SQL IDENTIFICATORI E TIPI DI DATI COMANDI E ISTRUZIONI

Algebra Relazionale. algebra relazionale

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

Basi di dati: appello 14/07/06

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

Basi di dati. SQL: concetti base

SQL. Il nome sta per Structured Query Language Le interrogazioni SQL sono dichiarative

BREVE APPENDICE SULLE UNITA' LOGARITMICHE

Erasmo Modica. : K K K

Esercizi svolti Limiti. Prof. Chirizzi Marco.

Transcript:

Il linguggio SQL: le si Sistemi Informtivi L-A Home Pge del corso: http://www-d.deis.unio.it/courses/sil-a/ Versione elettronic: SQL-si.pdf Sistemi Informtivi L-A SQL: crtteristiche generli SQL (Structured Query Lnguge) è il linguggio stndrd de fcto per DBMS relzionli, che riunisce in sé funzionlità di DDL, DML e DCL SQL è un linguggio dichirtivo (non-procedurle), ovvero non specific l sequenz di operzioni d compiere per ottenere il risultto SQL è relzionlmente completo, nel senso che ogni espressione dell lger relzionle può essere trdott in SQL inoltre SQL f molte ltre cose Il modello dei dti di SQL è sto su telle nziché relzioni: Possono essere presenti righe (tuple) duplicte In lcuni csi l ordine delle colonne (ttriuti) h rilevnz il motivo è prgmtico (ossi legto considerzioni sull efficienz) SQL dott l logic 3 vlori introdott con l Alger Relzionle SQL - Bsi Sistemi Informtivi L-A 1

SQL: stndrd e diletti Il processo di stndrdizzzione di SQL è inizito nel 1986 Nel 199 è stto definito lo stndrd SQL- (o SQL-9) d prte dell ISO (Interntionl Stndrds Orgniztion), e dell ANSI (Americn Ntionl Stndrds Institute), rispettivmente descritti nei documenti ISO/IEC 9075:199 e ANSI X3.135-199 (identici!) Del 1999 è lo stndrd SQL:1999, che rende SQL un linguggio computzionlmente completo (e quindi con istruzioni di controllo!) per il supporto di oggetti persistenti Allo stto ttule ogni sistem h ncor un suo diletto: support (in lrg prte) SQL- h già elementi di SQL:1999 h nche costrutti non stndrd Quello che vedimo è l prte più diffus SQL - Bsi Sistemi Informtivi L-A 3 Orgnizzzione del mterile L trttzione di SQL viene suddivis in più prti come segue: DDL di se e DML per gli opertori dell lger e per le operzioni di modific dei dti Per fre quello che si f nche in lger DML per il rggruppmento dei dti Per derivre informzioni di sintesi di dti DML con locchi innestti Per scrivere richieste complesse DDL per l definizione di viste e vincoli generici Per migliorre l qulità dei dti Utilizzo di SQL d linguggio ospite Per scrivere ppliczioni SQL - Bsi Sistemi Informtivi L-A 4

Dt Definition Lnguge (DDL) Il DDL di SQL permette di definire schemi di relzioni (o tle, telle), modificrli ed eliminrli Permette di inoltre di specificre vincoli, si livello di tupl (o rig ) che livello di tell Permette di definire nuovi domini, oltre quelli predefiniti Per vincoli e domini si può nche fre uso del DML (quindi inizilmente non si trttno completmente) Inoltre si possono definire viste ( view ), ovvero telle virtuli, e indici, per ccedere efficientemente i dti (questi ultimi li vedremo in SI L-B) Per qunto non trttto nel seguito si fcci riferimento l mterile di lortorio SQL - Bsi Sistemi Informtivi L-A 5 Crezione ed eliminzione di telle Medinte l istruzione CREATE TABLE si definisce lo schem di un tell e se ne cre un istnz vuot Per ogni ttriuto v specificto il dominio, un eventule vlore di defult e eventuli vincoli Infine possono essere espressi ltri vincoli livello di tell Medinte l istruzione DROP TABLE è possiile eliminre lo schem di un tell (e conseguentemente l corrispondente istnz) DROP TABLE Imp SQL - Bsi Sistemi Informtivi L-A 6 3

Definizione di telle: esempio CREATE TABLE Imp ( CodImp chr(4) PRIMARY KEY, CF chr(16) NOT NULL UNIQUE, -- chive Cognome vrchr(60) NOT NULL, Nome vrchr(30) NOT NULL, Sede chr(3) REFERENCES Sedi(Sede), -- FK Ruolo chr(0) DEFAULT Progrmmtore, Stipendio int CHECK (Stipendio > 0), UNIQUE (Cognome, Nome) -- chive ) CREATE TABLE Prog ( CodProg chr(3), Citt vrchr(40), PRIMARY KEY (CodProg,Citt) ) SQL - Bsi Sistemi Informtivi L-A 7 Vlori nulli e vlori di defult Per vietre l presenz di vlori nulli, è sufficiente imporre il vincolo NOT NULL CF chr(16) NOT NULL, Per ogni ttriuto è inoltre possiile specificre un vlore di defult, che verrà usto se ll tto dell inserimento di un tupl non viene fornito esplicitmente un vlore per l ttriuto reltivo Ruolo chr(0) DEFAULT Progrmmtore SQL - Bsi Sistemi Informtivi L-A 8 4

Chivi L definizione di un chive vviene esprimendo un vincolo UNIQUE, che si può specificre in line, se l chive consiste di un singolo ttriuto CF chr(16) UNIQUE, o dopo ver dichirto tutti gli ttriuti, se l chive consiste di uno o più ttriuti: UNIQUE(Cognome,Nome) Ovvimente, specificre sree molto più restrittivo UNIQUE(Cognome), UNIQUE(Nome) SQL - Bsi Sistemi Informtivi L-A 9 Chivi primrie L definizione dell chive primri di un tell vviene specificndo un vincolo PRIMARY KEY, o in line o come vincolo di tell CodImp chr(4) PRIMARY KEY PRIMARY KEY (CodProg,Citt) V osservto che: L specific di un chive primri non è oligtori Si può specificre l mssimo un chive primri per tell Non è necessrio specificre NOT NULL per gli ttriuti dell primry key In DB è necessrio specificre il vincolo NOT NULL si per definire chivi si per definire chivi primrie! SQL - Bsi Sistemi Informtivi L-A 10 5

Chivi strniere ( foreign key ) L definizione di un foreign key vviene specificndo un vincolo FOREIGN KEY, e indicndo qule chive viene referenzit Sede chr(3) REFERENCES Sedi(Sede) Ovvero FOREIGN KEY (Sede) REFERENCES Sedi(Sede) Nell esempio, Imp è dett tell di riferimento e Sedi tell di destinzione (nlog terminologi per gli ttriuti coinvolti) Le colonne di destinzione devono essere un chive dell tell destinzione (non necessrimente l chive primri) Se si omettono gli ttriuti destinzione, vengono ssunti quelli dell chive primri Sede chr(3) REFERENCES Sedi SQL - Bsi Sistemi Informtivi L-A 11 Vincoli generici ( check constrint ) Medinte l clusol CHECK è possiile esprimere vincoli di tupl ritrri, sfruttndo tutto il potere espressivo di SQL L sintssi è: CHECK (<condizione>) Il vincolo è violto se esiste lmeno un tupl che rende fls l <condizione>. Pertnto Stipendio int CHECK (Stipendio > 0), non permette tuple con stipendio negtivo, m mmette vlori nulli per l ttriuto Stipendio Se CHECK viene espresso livello di tell (nziché nell definizione dell ttriuto) è possiile fre riferimento più ttriuti dell tell stess CHECK (ImportoLordo = Netto + Ritenute) In DB il CHECK può usre solo condizioni vlutili sull singol tupl SQL - Bsi Sistemi Informtivi L-A 1 6

Vincoli con nomi A fini dignostici (e di documentzione) è spesso utile spere qule vincolo è stto violto seguito di un zione sul DB A tle scopo è possiile ssocire dei nomi i vincoli, d esempio: Stipendio int CONSTRAINT StipendioPositivo CHECK (Stipendio > 0), CONSTRAINT ForeignKeySedi FOREIGN KEY (Sede) REFERENCES Sedi SQL - Bsi Sistemi Informtivi L-A 13 Modific di telle Medinte l istruzione ALTER TABLE è possiile modificre lo schem di un tell, in prticolre: Aggiungendo ttriuti Aggiungendo o rimuovendo vincoli ALTER TABLE Imp ADD COLUMN Sesso chr(1) CHECK (Sesso in ( M, F )) ADD CONSTRAINT StipendioMx CHECK (Stipendio < 4000) DROP CONSTRAINT StipendioPositivo DROP UNIQUE(Cognome,Nome); Se si ggiunge un ttriuto con vincolo NOT NULL, isogn prevedere un vlore di defult, che il sistem ssegnerà utomticmente tutte le tuple già presenti ADD COLUMN Istruzione chr(10) NOT NULL DEFAULT Lure SQL - Bsi Sistemi Informtivi L-A 14 7

Dt Mnipultion Lnguge (DML) Le istruzioni principli del DML di SQL sono SELECT INSERT DELETE UPDATE esegue interrogzioni (query) sul DB inserisce nuove tuple nel DB cncell tuple dl DB modific tuple del DB INSERT può usre il risultto di un query per eseguire inserimenti multipli DELETE e UPDATE possono fre uso di condizioni per specificre le tuple d cncellre o modificre SQL - Bsi Sistemi Informtivi L-A 15 DB di riferimento per gli esempi Imp Sedi CodImp Nome Sede Ruolo Stipendio Sede Responsile Citt E001 Rossi Anlist 000 Biondi Milno E00 Verdi Sistemist 1500 Mori Bologn E003 Binchi Progrmmtore 1000 S03 Fulvi Milno E004 Gilli S03 Progrmmtore 1000 E005 E006 E007 E008 Neri Grigi Violetti Arnci Anlist Sistemist Progrmmtore Progrmmtore 500 1100 1000 100 Prog CodProg P01 P01 Citt Milno Bologn P0 Bologn SQL - Bsi Sistemi Informtivi L-A 16 8

L istruzione SELECT È l istruzione che permette di eseguire interrogzioni (query) sul DB L form di se è: SELECT A1,A,..,Am FROM R1,R,..,Rn WHERE <condizione> ovvero: SELECT (o TARGET) list clusol FROM clusol WHERE (cos si vuole come risultto) (d dove si prende) (che condizioni deve soddisfre) SQL - Bsi Sistemi Informtivi L-A 17 SELECT su singol tell Codice, nome e ruolo dei dipendenti dell sede SELECT CodImp, Nome, Ruolo WHERE Sede = Si ottiene in questo modo: CodImp E001 E003 E006 E007 L clusol FROM dice di prendere l tell IMP Nome Rossi Binchi Sistemist L clusol WHERE dice di prendere solo le tuple per cui Sede= Infine, si estrggono i vlori degli ttriuti (o colonne ) nell SELECT list Grigi Violetti Ruolo Anlist Progrmmtore Progrmmtore Equivle π CodImp,Nome,Ruolo (σ Sede = (Imp)) SQL - Bsi Sistemi Informtivi L-A 18 9

SELECT senz proiezione Se si vogliono tutti gli ttriuti: SELECT CodImp, Nome, Sede, Ruolo, Stipendio WHERE Sede = si può revire con: SELECT * WHERE Sede = SQL - Bsi Sistemi Informtivi L-A 19 SELECT senz condizione Se si vogliono tutte le tuple: SELECT CodImp, Nome, Ruolo Quindi SELECT * restituisce tutt l istnz di Imp SQL - Bsi Sistemi Informtivi L-A 0 10

Telle vs Relzioni Il risultto di un query SQL può contenere righe duplicte: SELECT Ruolo WHERE Sede = Ruolo Anlist Progrmmtore Sistemist Progrmmtore Per eliminrle si us l opzione DISTINCT nell SELECT list SELECT DISTINCT Ruolo WHERE Sede = Ruolo Anlist Progrmmtore Sistemist SQL - Bsi Sistemi Informtivi L-A 1 Espressioni nell clusol SELECT L SELECT list può contenere non solo ttriuti, m nche espressioni: SELECT CodImp, Stipendio*1 WHERE Sede = CodImp E001 E003 E006 E007 4000 1000 1300 1000 Si noti che in questo cso l second colonn non h un nome SQL - Bsi Sistemi Informtivi L-A 11

Ridenominzione delle colonne Ad ogni elemento dell SELECT list è possiile ssocire un nome picere: SELECT CodImp AS Codice, Stipendio*1 AS StipendioAnnuo Codice StipendioAnnuo WHERE Sede = E001 E003 E006 E007 4000 1000 1300 1000 L prol chive AS può nche essere omess: SELECT CodImp Codice,... SQL - Bsi Sistemi Informtivi L-A 3 Pseudonimi Per chirezz, ogni nome di colonn può essere scritto prefissndolo con il nome dell tell: SELECT Imp.CodImp AS Codice, Imp.Stipendio*1 AS StipendioAnnuo WHERE Imp.Sede = e si può nche usre uno pseudonimo (lis) in luogo del nome dell tell SELECT I.CodImp AS Codice, I.Stipendio*1 AS StipendioAnnuo I -- oppure Imp AS I WHERE I.Sede = SQL - Bsi Sistemi Informtivi L-A 4 1

Opertore LIKE L opertore LIKE, medinte le wildcrd _ (un crttere ritrrio) e % (un string ritrri), permette di esprimere dei pttern su stringhe Nomi degli impiegti che finiscono con un i e hnno un i in second posizione SELECT Nome WHERE Nome LIKE _i%i Nome Binchi Gilli Violetti SQL - Bsi Sistemi Informtivi L-A 5 Opertore BETWEEN L opertore BETWEEN permette di esprimere condizioni di pprtenenz un intervllo Nome e stipendio degli impiegti che hnno uno stipendio compreso tr 1300 e 000 Euro (estremi inclusi) SELECT Nome, Stipendio WHERE Stipendio BETWEEN 1300 AND 000 Nome Rossi Verdi Stipendio 000 1500 SQL - Bsi Sistemi Informtivi L-A 6 13

Opertore IN L opertore IN permette di esprimere condizioni di pprtenenz un insieme Codici e sedi degli impiegti delle sedi e S03 SELECT CodImp, Sede WHERE Sede IN (, S03 ) Lo stesso risultto si ottiene scrivendo: CodImp E00 E004 E005 E008 Sede S03 SELECT CodImp, Sede WHERE Sede = OR Sede = S03 SQL - Bsi Sistemi Informtivi L-A 7 Vlori nulli Il trttmento dei vlori nulli si s su qunto già visto in lger relzionle, quindi SELECT CodImp WHERE Stipendio > 1500 OR Stipendio <= 1500 restituisce solo CodImp E001 E00 E003 E005 Imp CodImp E001 E00 E003 E004 E005 E006 E007 E008 Sede S03 Stipendio 000 1500 1000 NULL 500 NULL 1000 100 E007 E008 SQL - Bsi Sistemi Informtivi L-A 8 14

Logic 3 vlori in SQL Nel cso di espressioni complesse, SQL ricorre ll logic 3 vlori: vero (V), flso (F) e sconosciuto (?) SELECT CodImp, Sede, Stipendio WHERE (Sede = S03 ) OR (Stipendio > 1500) CodImp E001 E004 E005 Sede S03 Stipendio 000 NULL 500 Per verificre se un vlore è NULL si us l opertore IS NOT (A IS NULL) si scrive nche A IS NOT NULL SELECT CodImp WHERE Stipendio IS NULL CodImp E004 E006 SQL - Bsi Sistemi Informtivi L-A 9 Ordinmento del risultto Per ordinre il risultto di un query secondo i vlori di un o più colonne si introduce l clusol ORDER BY, e per ogni colonn si specific se l ordinmento è per vlori scendenti (ASC, il defult) o discendenti (DESC) SELECT Nome, Stipendio ORDER BY Stipendio DESC, Nome Nome Neri Rossi Verdi Arnci Grigi Binchi Gilli Violetti Stipendio 500 000 1500 100 1100 1000 1000 1000 SQL - Bsi Sistemi Informtivi L-A 30 15

Interrogzioni su più telle L interrogzione SELECT I.Nome, I.Sede, S.Citt I, Sedi S WHERE I.Sede = S.Sede AND I.Ruolo = Progrmmtore si interpret come segue: Si esegue il prodotto Crtesino di Imp e Sedi Si pplicno i predicti dell clusol WHERE Si estrggono le colonne dell SELECT list Il predicto I.Sede = S.Sede è detto predicto di join, in qunto stilisce il criterio con cui le tuple di Imp e di Sedi devono essere cominte SQL - Bsi Sistemi Informtivi L-A 31 Interrogzioni su più telle: risultto Dopo vere pplicto il predicto I.Sede = S.Sede: I.CodImp I.Nome I.Sede I.Ruolo I.Stipendio S.Sede S.Responsile S.Citt E001 Rossi Anlist 000 Biondi Milno E00 Verdi Sistemist 1500 Mori Bologn E003 Binchi Progrmmtore 1000 Biondi Milno E004 Gilli S03 Progrmmtore 1000 S03 Fulvi Milno E005 Neri Anlist 500 Mori Bologn E006 Grigi Sistemist 1100 Biondi Milno E007 Violetti Progrmmtore 1000 Biondi Milno E008 Arnci Progrmmtore 100 Mori Bologn SQL - Bsi Sistemi Informtivi L-A 3 16

Ridenominzione del risultto Se l SELECT list contiene o più colonne con lo stesso nome, è necessrio operre un ridenominzione per ottenere un output con tutte le colonne intestte SELECT I.Sede AS SedeE001, S.Sede AS AltrSede I, Sedi S WHERE I.Sede <> S.Sede AND I.CodImp = E001 SedeE001 AltrSede S03 SQL - Bsi Sistemi Informtivi L-A 33 Self Join L uso di lis è forzto qundo si deve eseguire un self-join Chi sono i nonni di Ann? Genitori G1 Genitore Figlio Luc Ann Mri Ann Giorgio Luc Silvi Mri Enzo Mri Genitori G Genitore Figlio Luc Ann Mri Ann Giorgio Luc Silvi Mri Enzo Mri SELECT G1.Genitore AS Nonno FROM Genitori G1, Genitori G WHERE G1.Figlio = G.Genitore AND G.Figlio = Ann SQL - Bsi Sistemi Informtivi L-A 34 17

Join espliciti Anziché scrivere i predicti di join nell clusol WHERE, è possiile costruire un joined tle direttmente nell clusol FROM SELECT I.Nome, I.Sede, S.Citt I JOIN Sedi S ON (I.Sede = S.Sede) WHERE I.Ruolo = Progrmmtore in cui JOIN si può nche scrivere INNER JOIN Altri tipi di join espliciti sono: LEFT [OUTER] JOIN RIGHT [OUTER] JOIN FULL [OUTER] JOIN NATURAL JOIN DB non support il join nturle SQL - Bsi Sistemi Informtivi L-A 35 Opertori insiemistici L istruzione SELECT non permette di eseguire unione, intersezione e differenz di telle Ciò che si può fre è cominre in modo opportuno i risultti di due istruzioni SELECT, medinte gli opertori UNION, INTERSECT, EXCEPT In tutti i csi gli elementi delle SELECT list devono vere tipi comptiili e gli stessi nomi se si vogliono colonne con un intestzione definit L ordine degli elementi è importnte (notzione posizionle) Il risultto è in ogni cso privo di duplicti, per mntenerli occorre ggiungere l opzione ALL: UNION ALL, INTERSECT ALL, EXCEPT ALL SQL - Bsi Sistemi Informtivi L-A 36 18

Opertori insiemistici: esempi (1) R A 1 1 3 B c S C SELECT A A FROM R 1 UNION SELECT C AS A 3 FROM S 4 1 1 3 4 B c c d SELECT A FROM R 1 UNION SELECT C 3 FROM S 4 SELECT A,B FROM R UNION SELECT B,C AS A FROM S Non corrett! SELECT B FROM R UNION ALL SELECT B FROM S B c c c d SQL - Bsi Sistemi Informtivi L-A 37 Opertori insiemistici: esempi () R A 1 1 B c SELECT B FROM R INTERSECT SELECT B FROM S B c SELECT B FROM S EXCEPT SELECT B FROM R B d 3 S C 1 1 3 B c c SELECT B FROM R INTERSECT ALL SELECT B FROM S B c SELECT B FROM R EXCEPT ALL SELECT B FROM S B 4 d SQL - Bsi Sistemi Informtivi L-A 38 19

Istruzioni di ggiornmento dei dti Le istruzioni che permettono di ggiornre il DB sono INSERT DELETE UPDATE inserisce nuove tuple nel DB cncell tuple dl DB modific tuple del DB INSERT può usre il risultto di un query per eseguire inserimenti multipli DELETE e UPDATE possono fre uso di condizioni per specificre le tuple d cncellre o modificre In ogni cso gli ggiornmenti rigurdno un sol relzione SQL - Bsi Sistemi Informtivi L-A 39 Inserimento di tuple: cso singolo È possiile inserire un nuov tupl specificndone i vlori INSERT INTO Sedi(Sede,Responsile,Citt) VALUES ( S04, Bruni, Firenze ) Ci deve essere corrispondenz tr ttriuti e vlori L list degli ttriuti si può omettere, nel qul cso vle l ordine con cui sono stti definiti Se l list non include tutti gli ttriuti, i restnti ssumono vlore NULL (se mmesso) o il vlore di defult (se specificto) INSERT INTO Sedi(Sede,Citt) -- sede senz responsile VALUES ( S04, Firenze ) SQL - Bsi Sistemi Informtivi L-A 40 0

Inserimento di tuple: cso multiplo È possiile nche inserire le tuple che risultno d un query INSERT INTO SediBologn(SedeBO,Resp) SELECT Sede,Responsile FROM Sedi WHERE Citt = Bologn Vlgono ncor le regole viste per il cso singolo Gli schemi del risultto e dell tell in cui si inseriscono le tuple possono essere diversi, l importnte è che i tipi delle colonne sino comptiili SQL - Bsi Sistemi Informtivi L-A 41 Cncellzione di tuple L istruzione DELETE può fre uso di un condizione per specificre le tuple d cncellre DELETE FROM Sedi -- elimin le sedi di Bologn WHERE Citt = Bologn Che succede se l cncellzione port violre il vincolo di integrità referenzile? (d es.: che ccde gli impiegti delle sedi di Bologn?) lo vedimo tr minuti SQL - Bsi Sistemi Informtivi L-A 4 1

Modific di tuple Anche l istruzione UPDATE può fre uso di un condizione per specificre le tuple d modificre e di espressioni per determinre i nuovi vlori UPDATE Sedi SET Responsile = Bruni, Citt = Firenze WHERE Sede = UPDATE Imp SET Stipendio = 1.1*Stipendio WHERE Ruolo = Progrmmtore Anche l UPDATE può portre violre il vincolo di integrità referenzile SQL - Bsi Sistemi Informtivi L-A 43 Politiche di rezione Anziché lscire l progrmmtore il compito di grntire che fronte di cncellzioni e modifiche i vincoli di integrità referenzile sino rispettti, si possono specificre opportune politiche di rezione in fse di definizione degli schemi CREATE TABLE Imp ( CodImp chr(4) PRIMARY KEY, Sede chr(3),... FOREIGN KEY Sede REFERENCES Sedi ON DELETE CASCADE -- cncellzione in csct ON UPDATE NO ACTION -- modifiche non permesse Altre politiche: SET NULL e SET DEFAULT SQL - Bsi Sistemi Informtivi L-A 44

Rissumimo: Il linguggio SQL è lo stndrd de fcto per intergire con DB relzionli Si discost dl modello relzionle in qunto permette l presenz di tuple duplicte (telle nziché relzioni) L definizione delle telle permette di esprimere vincoli e nche di specificre politiche di rezione fronte di violzioni dell integrità referenzile L istruzione SELECT consiste nell su form se di 3 prti: SELECT, FROM e WHERE A queste si ggiunge ORDER BY, per ordinre il risultto (e ltre che vedremo) Per trttre i vlori nulli, SQL ricorre un logic 3 vlori (vero, flso e sconosciuto) SQL - Bsi Sistemi Informtivi L-A 45 3