linguaggio sql (1) - disco · sql come linguaggio di query le query scritte in sql esprimono le...

112
Linguaggio SQL (1) Il linguaggio SQL, acronimo di Structured Query Language ` e un linguaggio per la definizione e la manipolazione dei dati, sviluppato originariamente presso il laboratorio IBM a San Jose (Calif.). ` E un linguaggio oggi usato in numerosi DBMS disponibili come prodotti commerciali ` E stato definito uno standard noto come SQL-2 (noto anche come SQL-92) Un nuovo standard, noto come SQL-3, ` e stato definito nel 1999. La maggior parte dei sistemi supporta le funzionalit` a di base dello standard SQL-3 ed offrono estensioni proprietarie. Tra i DBMS che usano SQL ricordiamo: SQL/DS e DB2 (IBM), Ora- cle, SQL Server (Microsoft), Informix, Sybase, CA-Ingres (Computer Associates) ed Access. Informatica Generale 1 sql.tex: Versione 1.0, aa 2006-2007

Upload: others

Post on 10-Jul-2020

24 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Linguaggio SQL (1)

• Il linguaggio SQL, acronimo di Structured Query Language e unlinguaggio per la definizione e la manipolazione dei dati, sviluppatooriginariamente presso il laboratorio IBM a San Jose (Calif.).

• E un linguaggio oggi usato in numerosi DBMS disponibili comeprodotti commerciali

• E stato definito uno standard noto come SQL-2 (noto anche comeSQL-92)

• Un nuovo standard, noto come SQL-3, e stato definito nel 1999.

• La maggior parte dei sistemi supporta le funzionalita di base dellostandard SQL-3 ed offrono estensioni proprietarie.

• Tra i DBMS che usano SQL ricordiamo: SQL/DS e DB2 (IBM), Ora-cle, SQL Server (Microsoft), Informix, Sybase, CA-Ingres (ComputerAssociates) ed Access.

Informatica Generale 1 sql.tex: Versione 1.0, aa 2006-2007

Page 2: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Linguaggio SQL (2)

Le istruzioni del linguaggio SQL si dividono in due categorie:

• Le istruzioni che consentono di costruire le relazioni, le quali per-mettono di specificare i nomi degli attributi e il loro dominio. Comevedremo SQL ha dei domini predefiniti. Esistono inoltre istruzioniche consentono di specificare i vincoli di integrita referenziale. Com-plessivamente questa parte del linguaggio viene detta Data DefinitionLanguage (DDL);

• Le istruzioni che implementano gli operatori dell’algebra relazionalee che consentono di scrivere le query. Tale parte del linguaggio enota come Data Manipulation Language (DML).

Informatica Generale 2 sql.tex: Versione 1.0, aa 2006-2007

Page 3: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Domini (1)

• I domini specificano il contenuto degli attributi;

• I domini in SQL sono suddivisi in 3 categorie: domini numerici,domini carattere e domini temporali

• I vari domini sono suddivisi in sottocategorie

Informatica Generale 3 sql.tex: Versione 1.0, aa 2006-2007

Page 4: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Il Domino Character

Il domino CHARACTER permette di definire attributi che conten-gono un singolo carattere o stringhe di caratteri di lunghezza massimapredefinita. La sintassi e:

character [(Lunghezza)]

dove Lunghezza e un numero intero che se compare deve essere tratonde ed indica il massimo numero di caratteri che puo contenere l’at-tributo. Se la parola chiave character non e seguita da alcun interoallora si assume che il dominio sia costituito da un singolo carattere.

• character (20)

• characterdefiniscono due domini contenenti rispettivamente tutte le parole (strin-ghe) di al massimo 20 caratteri e tutte le stringhe di al massimo 1carattere. ’rossi’, ’romanzo’ sono due costanti appartenenti alprimo dominio. Le costanti di un dominio character devono esserecomprese tra apici.

Informatica Generale 4 sql.tex: Versione 1.0, aa 2006-2007

Page 5: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Domini Numerici Esatti (1)

I domini numerici esatti permettono di definire attributi che contenego-no valori esatti interi o con parte frazionaria. Esistono quattro domini:

• integer, contiene tutti gli interi compresi tra -2147483648 e+2147483647;

• smallint, contiene tutti gli interi compresi tra -32768 e +32767;

• numeric [(precisione [,scala])], consente di definire domi-ni contenenti numeri positivi e negativi la cui quantita di cifre e datada precisione di cui quelle decimali sono date da scala. I para-metri precisione e scala sono opzionali e se non specificati as-sumono valori predefiniti dipendenti dal DBMS che si sta utilizzando(ad esempio precisione 30 e scala 6);

• decimal [(precisione [,scala])] come numeric, con la dif-ferenza che precisione e scala rappresentano le esigenze minimee il sistema potra fornire una rappresentazione con precisione o scalamaggiore.

Informatica Generale 5 sql.tex: Versione 1.0, aa 2006-2007

Page 6: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Domini Numerici Esatti (2)

Si osservi che i primi due domini contengono solo numeri interi e sonofissati dallo standard SQL. I domini numeric e decimal consentonoall’utente di definire insiemi di numeri positivi e negativi di grandezzaarbitraria e con un numero arbitrario di cifre decimali. Ad esempio

numeric (4,2)

definisce il dominio di tutti i numeri potitivi e negativi costituiticomplessivamente da al piu 4 cifre, di cui al massimo due dopo lavirgola.

Informatica Generale 6 sql.tex: Versione 1.0, aa 2006-2007

Page 7: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Domini Numerici Approssimati

Lo scopo di questi domini numerici e quello di simulare i numeri reali.Un calcolarore non puo rappresentare l’insieme dei reali, ma puo solotentare di approssimarli. Esistono due domini:

• double precision, occupano 8 byte e hanno fino a 15 cifredecimali significative;

• real, occupano 4 byte e hanno fino a 6 cifre decimali significative;

Informatica Generale 7 sql.tex: Versione 1.0, aa 2006-2007

Page 8: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Domini Temporali

I domini temporali permettono il trattamento di date, tempi e intervallidi tempo. Esistono quattro tipi di dominio:

• date, un attributo di dominio date contiene le date di calendarioin termini di giorno, mese, anno;

• time, un attributo di dominio time contiene gli istanti di unagiornata in termini di ore, minuti, secondi;

• timestamp, un attributo di dominio timestamp contiene sia la datache l’istante di tempo;

• interval, un attributo di dominio interval contiene intervalli ditempo, spesso generati per sottrazione da due attributi di tipo date,time o timestamp;

Il formato in cui sono espressi tempi e date dipende dal DBMS e dallasua configurazione, quindi ’1/8/1999’ e ’1999-01-08’ esprimonola stessa data e ’04:05:06’ ’040506’ esprimono lo stesso tempo.

Informatica Generale 8 sql.tex: Versione 1.0, aa 2006-2007

Page 9: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Creazione di Tabelle con SQL (1)

• La creazione di tabelle avviene tramite il comando di Create Table

• La sintassi di questo comando e molto articolata. Di seguito nepresentiamo una versione semplificata adatta ai nostri scopi:

CREATE TABLE NomeTabella(NomeColonna Dominio[,NomeColonna Dominio]...[, PRIMARY KEY (ListaDiNomiDiColonna)]

)

dove:

Informatica Generale 9 sql.tex: Versione 1.0, aa 2006-2007

Page 10: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Creazione di Tabelle con SQL (2)

• NomeTabella e il nome della relazione che viene creata;

• NomeColonna Dominio [,NomeColonna Dominio]... e l’elenco sepa-rato da virgole degli attributi, con relativo dominio, che fanno partedella relazione. Ogni tabella ha almeno una colonna;

• PRIMARY KEY specifica quali attributi fanno parte della chiaveprimaria. ListaDiNomiDiColonna e una lista separata da virgole dinomi di attributi. La chiave primaria non e obbligatoria.

Informatica Generale 10 sql.tex: Versione 1.0, aa 2006-2007

Page 11: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempi di Creazione di Tabelle (1)

CREATE TABLE Impiegati(ImpId Integer,Nome Char(20),Mansione Char(10),Data-A Date,Stipendio Real,Premio-P Real,DipNum Integer,PRIMARY KEY (ImpId)

);

CREATE TABLE Docente(Id Char(7),Nome Char(20),Residenza Char(15),PRIMARY KEY (Id)

);Informatica Generale 11 sql.tex: Versione 1.0, aa 2006-2007

Page 12: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempi di Creazione di Tabelle (2)

CREATE TABLE Studente(Id Char(6),Name Char(20),Residenza Char(15),Birthdate Date,PRIMARY KEY (Id)

);

CREATE TABLE Relatore(IdDoc Char(7),IdStud Char(6),PRIMARY KEY (IdDoc)

);

Informatica Generale 12 sql.tex: Versione 1.0, aa 2006-2007

Page 13: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempi di Creazione di Tabelle (3)

CREATE TABLE Cittadino (Nome Char(15),Cognome Char(25),LuogoNascita Char(30),DataNascita Date,Residenza Char(30),NumCivico Smallint,Scala Smallint,

PRIMARY KEY (Nome,Cognome,LuogoNascita,DataNascita));

Informatica Generale 13 sql.tex: Versione 1.0, aa 2006-2007

Page 14: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

SQL come Linguaggio di Query

Le query scritte in SQL esprimono le proprieta che il rusultato devesoddisfare e non il modo in cui ottenere tale risultato. In questo sensosi dice che SQL e un linguaggio dichiarativo.

Informatica Generale 14 sql.tex: Versione 1.0, aa 2006-2007

Page 15: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Le Tabelle su cui Lavoreremo

Impiegati:

ImpId Nome Mansione DataAss Stipendio PremioProd DipNum

7369 Rossi ingegnere 17-Dic-80 1600, 00 500, 00 207499 Andrei tecnico 20-Feb-81 800, 00 ? 307521 Bianchi tecnico 20-Feb-81 800, 00 100, 00 307566 Rosi dirigente 02-Apr-81 2975, 00 ? 207654 Martini segretaria 28-Set-81 800, 00 ? 307698 Blacchi dirigente 01-Mag-81 2850, 00 ? 307782 Neri ingegnere 01-Giu-81 2450, 00 200, 00 107788 Scotti segretaria 09-Nov-81 800, 00 ? 207839 Dare ingegnere 17-Nov-81 2600, 00 300, 00 107844 Turni tecnico 08-Set-81 1500, 00 ? 307876 Adami ingegnere 28-Set-81 1100, 00 500, 00 207900 Gianni ingegnere 03-Dic-81 1950, 00 ? 307902 Fordi segretaria 03-Dic-81 1000, 00 ? 207934 Milli ingegnere 23-Gen-82 1300, 00 150, 00 107977 Verdi dirigente 10-Dic-80 3000, 00 ? 10

Dipartimenti:

DipId NomeDip Ufficio Divisione Dirigente

10 Edilizia Civile 1100 D1 797720 Ricerche 2200 D1 756630 Edilizia Stradale 5100 D2 7698

Informatica Generale 15 sql.tex: Versione 1.0, aa 2006-2007

Page 16: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Le Tabelle su cui Lavoreremo

Studenti Matricola Cognome Nome101010 Rossi Mario254532 Verdi Giovanni356622 Blu Francesca312457 Gialli Marina201015 Rossi Giovanni

Esami Studente Voto Corso101010 22 A22254532 27 C12101010 30 C12312457 28 K09101010 28 K09

Corsi Id Nome DocenteA22 Analisi I PeanoC12 Fisica FermiD55 Informatica TuringK09 Chimica CurieA23 Analisi II Peano

Informatica Generale 16 sql.tex: Versione 1.0, aa 2006-2007

Page 17: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Prodotto Cartesiano con SQL

In SQL, il prodotto cartesiano di relazioni e ottenuto mediante ilcostrutto SELECT FROM. La sintassi del comando e:

SELECT *FROM NomeTabella [,NomeTabella]...

dove nella clausola FROM

NomeTabella [,NomeTabella]...

e un elenco di nomi di relazione create con il comando CREATE TA-BLE. La query SQL e quindi equivalente a fare il prodotto cartesianodelle tabelle elencate nella clausola FROM.

SELECT *FROM Corsi,Esami

Informatica Generale 17 sql.tex: Versione 1.0, aa 2006-2007

Page 18: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Prodotto Cartesiano con SQL (2)

• La query SQL costruisce la relazione corrispondente al prodottocartesiano delle relazioni elencate della clasusola FROM;

• l’elenco nella clausola FROM deve contenere almeno un elemento;

• nella clausola FROM uno stesso nome di relazione puo occorrereal piu una volta;

• a differenza di quanto avviene nell’algebra relazionale, SQL nominaogni attributo del cartesiano con il nome della relazione da cui l’attri-buto proviene, seguito da un punto, seguito dal nome dell’attributonella relazione di provenienza;

• a differenza di quanto avviene nell’algebra relazionale, SQL consen-te di costruire il cartesiano di relazioni aventi nomi di attributo incomune senza fare ricorso al renaming.

Informatica Generale 18 sql.tex: Versione 1.0, aa 2006-2007

Page 19: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Prodotto Cartesiano con SQL (3)

La seguente query SQL e corretta:

SELECT *FROM Studenti,Corsi

La seguente query SQL e scorretta:

SELECT *FROM Studenti,Corsi,Studenti

Informatica Generale 19 sql.tex: Versione 1.0, aa 2006-2007

Page 20: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Proiezione con SQL

In SQL la proiezione di una relazione e ottenuta mediante il costruttoSELECT FROM. La sintassi e:

SELECT NomeTabella.Attributo [,NomeTabella.Attributo]...FROM NomeTabella

dove nella clausola FROM

NomeTabella

e un nome di relazione creato con CREATE TABLE e nella clausolaSELECT

NomeTabella.Attributo [,NomeTabella.Attributo]...

e un elenco separato da virgole costituito dal nome della relazione nellaclausola FROM, seguito da un punto, seguito dal nome di uno degliattributi della relazione nella clausola FROM. L’elenco nella clausolaSELECT deve contenere almeno un elemento.

Informatica Generale 20 sql.tex: Versione 1.0, aa 2006-2007

Page 21: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Proiezione con SQL

La query SQL permette di ottenere una tabella avente come colonnesolo quelle elencate nella clausola SELECT

SELECT Impiegati.Nome,Impiegati.Mansione,Impiegati.DipNumFROM Impiegati

Informatica Generale 21 sql.tex: Versione 1.0, aa 2006-2007

Page 22: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Selezione con SQL

Con SQL e possibile eliminare alcine righe di una tabella aggiungendola clausola WHERE a SELECT FROM. La sintassi e la seguente:

SELECT *FROM NomeTabellaWHERE Condizione

dove nella clausola WHERE

Condizione

Le condizioni si compongono usando AND, OR e NOT.

• La query seleziona solo le righe della tabella nella clausola FROMche soddisfano il predicato nella clausola WHERE.

Informatica Generale 22 sql.tex: Versione 1.0, aa 2006-2007

Page 23: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempi di Selezione (1)

Selezionare gli impiegati che hanno uno stipendio maggiore di 2000

σStipendio>2000(Impiegati)

SELECT * FROM ImpiegatiWHERE Impiegati.Stipendio> 2000;

ImpID Nome Mansione DataA Stipendio PremioP DipID7566 Rosi dirigente 02-Apr-81 2975, 00 ? 207698 Blacchi dirigente 01-Mag-81 2850, 00 ? 307782 Neri ingegnere 01-Giu-81 2450, 00 200, 00 107839 Dare ingegnere 17-Nov-81 2600, 00 300, 00 107977 Verdi dirigente 10-Dic-80 3000, 00 ? 10

Informatica Generale 23 sql.tex: Versione 1.0, aa 2006-2007

Page 24: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempi di Selezione (2)

SELECT *FROM ImpiegatiWHERE Impiegati.Stipendio>2000 AND Impiegati.Stipendio<3000

SELECT *FROM ImpiegatiWHERE Impiegati.Mansione=’Dirigente’ AND 3*Impiegati.Stipendio<2000

Informatica Generale 24 sql.tex: Versione 1.0, aa 2006-2007

Page 25: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Cartesiano e Proiezione con SQL

In SQL e possibile costruire la proiezione del cartesiano di relazioni. Lasintassi e:

SELECT NomeTabella.Attributo [,NomeTabella.Attributo]...FROM NomeTabella [,NomeTabella]...

dove nella clausola FROM

NomeTabella [,NomeTabella]...

e un elenco di nomi di relazione create con il comando CREATETABLE, e nella clausola SELECT

NomeTabella.Attributo [,NomeTabella.Attributo]...

e un elenco separato da virgole costituito dal nome di una delle relazioninella clausola FROM, seguito da un punto, seguito dal nome di unodegli attributi della relazione a sinistra del punto.

Informatica Generale 25 sql.tex: Versione 1.0, aa 2006-2007

Page 26: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Cartesiano e Proiezione con SQL (2)

• La query SQL costruisce il prodotto cartesiano delle tabelle nellaclausola FROM e della relazione cosı ottenuta proietta solo lecolonne specificate nella lista in corrispondenza di SELECT.

• valgono le osservazioni fatte precedentemente sul cartesiano eproiezione di relazioni.

Informatica Generale 26 sql.tex: Versione 1.0, aa 2006-2007

Page 27: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempi di Cartesiano e Proiezione

La seguente query SQL e corretta:

SELECT Corsi.Nome, Corsi.DocenteFROM Studenti,Corsi;

La seguente query SQL non e corretta:

SELECT Studenti.Docente, Corsi.Nome, Corsi.DocenteFROM Studenti,Corsi;

perche Studenti non possiede un attributo chiamato Docente;

La seguente query SQL non e corretta:

SELECT Esami.Voto, Corsi.Nome, Corsi.DocenteFROM Studenti,Corsi;

perche Esami non e elencata nella clausola FROM;

Informatica Generale 27 sql.tex: Versione 1.0, aa 2006-2007

Page 28: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

SELECT FROM WHERE

Con SQL la query piu tipica e quella che usa il costrutto SELECTFROM WHERE. La sintassi e la seguente:

SELECT NomeTabella.Attributo [,NomeTabella.Attributo]...FROM NomeTabella [,NomeTabella]...WHERE Condizione

• La query costruisce il prodotto cartesiano delle relazioni nella clausolaFROM, seleziona solo le tuple che soddisfano il predicato nellaclausola WHERE e quindi proietta solo le colonne specificate nellaclausola SELECT.

Informatica Generale 28 sql.tex: Versione 1.0, aa 2006-2007

Page 29: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Abbreviazioni e Uso di *

•Quando di una relazione si vogliono proiettare tutti gli attributi, piut-tosto che scrivere SELECT seguito dall’intero elenco di attributie possibile scrivere SELECT *;

• qualora le relazioni nella clausola FROM non avessero nomi diattributo in comune e possibile abbreviare la scrittura NomeTabel-la.Attributo con Attributo sia nella clausola WHERE che nellaclausola SELECT.

Informatica Generale 29 sql.tex: Versione 1.0, aa 2006-2007

Page 30: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Abbreviazioni (1)

La query SQL

SELECT Esami.Voto,Corsi.Nome, Corsi.DocenteFROM Esami,Corsi;

puo essere abbreviata come

SELECT Voto,Nome, DocenteFROM Esami,Corsi;

Informatica Generale 30 sql.tex: Versione 1.0, aa 2006-2007

Page 31: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Abbreviazioni (2)

La query SQL

SELECT Studenti.Cognome,Studenti.Nome,Corsi.DocenteFROM Studenti,Corsi

puo essere abbreviata come

SELECT Cognome,Studenti.Nome,DocenteFROM Studenti,Corsi

ma non come

SELECT Cognome,Nome,DocenteFROM Studenti,Corsi

perche le relazioni Studenti e Corsi hanno entrambe un attributochiamato Nome.

Informatica Generale 31 sql.tex: Versione 1.0, aa 2006-2007

Page 32: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempi di Interrogazioni (1)

Selezionare il nome e il numero di dipartimento degli impiegatiche hanno uno stipendio maggiore di 2000 e hanno mansione diingegnere.

πNome,DipNum(σStipendio>2000∧Mansione=’ingegnere’(Impiegati))

SELECT Nome, DipNumFROM ImpiegatiWHERE Stipendio> 2000 AND Mansione=’ingegnere’;

Nome DipNumNeri 10Dare 10

Informatica Generale 32 sql.tex: Versione 1.0, aa 2006-2007

Page 33: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempi di Interrogazioni (2)

Selezionare il numero degli impiegati che lavorano nel dipartimento30 e sono ingegneri o tecnici.

πImpID(σDipNum=30∧(Mansione=’ingegnere’∨Mansione=’tecnico’)(Impiegati))

SELECT ImpIDFROM ImpiegatiWHERE DipNum=30 AND (Mansione =’ingegnere’ OR Mansio-ne = ’tecnico’);

ImpID7499752178447900

Informatica Generale 33 sql.tex: Versione 1.0, aa 2006-2007

Page 34: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Condizioni su Intervalli di Valori (1)

• L’operatore BETWEEN permette di determinare le tuple checontengono in un dato attributo valori in un intervallo specificato;

• Formato C BETWEEN v1 AND v2

• Forma negata C NOT BETWEEN v1 AND v2

• Esempio: Visualizzare il nome e lo stipendio degli impiegati constipendio compreso tra 1100 e 1400.

Informatica Generale 34 sql.tex: Versione 1.0, aa 2006-2007

Page 35: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Condizioni su Intervalli di Valori (2)

SELECT Nome, StipendioFROM ImpiegatiWHERE Stipendio BETWEEN 1100 AND 1400;

equivalente a

SELECT Nome, StipendioFROM ImpiegatiWHERE Stipendio >= 1100 AND Stipendio<= 1400;

Nome StipendioAdami 1100, 00Milli 1300, 00

Informatica Generale 35 sql.tex: Versione 1.0, aa 2006-2007

Page 36: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Ricerca di Valori in un Insieme (1)

L’operatore IN permette di determinare le tuple che contengono,in un dato attributo, uno tra i valori in un insieme specificato. Lasintassi e:

C IN (v1, v2, · · · , vn)

equivalente ai predicati:

C = v1 OR C = v2 OR · · ·C = vn

La sintassi per la forma negata e

C NOT IN (v1, v2, · · · , vn)

equivalente ai predicati:

NOT(C = v1) AND NOT(C = v2) AND · · · NOT(C = vn)e

C <> v1 AND C <> v2 AND · · ·C <> vn

Informatica Generale 36 sql.tex: Versione 1.0, aa 2006-2007

Page 37: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Ricerca di Valori in un Insieme (2)

Visualizzare i dipartimenti con codice 10 o 30.

SELECT *FROM DipartimentiWHERE DipID IN (10, 30);

DipID NomeDip Ufficio Divisione Dirigente10 Edilizia Civile D1 797730 Edilizia Stardale 5100 D2 7698

Equivalente a:

SELECT *FROM DipartimentiWHERE DipID=10 OR DipID=30;

Informatica Generale 37 sql.tex: Versione 1.0, aa 2006-2007

Page 38: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Confronto tra Stringhe di Caratteri

• L’operatore LIKE permette di eseguire alcune semplici operazioni dipattern-matching su colonne di dominio Character;

• Un predicato di confronto espresso con l’operatore LIKE ha ilseguente formato: C LIKE pattern;

• dove pattern e una stringa di caratteri che puo contenere i caratterispeciali % e ;

• Il carattere % combacia con una sequenza di caratteri arbitrari dilunghezza qualsiasi (anche zero);

• Il carattere combacia con un singolo carattere;

• I predicati formati con gli operatori BETWEEN, IN e LIKE pos-sono essere connessi con AND ed OR nella specifica di condizionicomplesse.

Informatica Generale 38 sql.tex: Versione 1.0, aa 2006-2007

Page 39: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Confronto tra Stringhe di Caratteri (1)

Determinare tutti gli impiegati che hanno ’r’ come terza lettera delNome.

SELECT NomeFROM ImpiegatiWHERE Nome LIKE ’ r%’;

NomeMartiniNeriDareTurniFordiVerdi

Informatica Generale 39 sql.tex: Versione 1.0, aa 2006-2007

Page 40: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Confronto tra Stringhe di Caratteri (2)

Determinare tutti gli impiegati il cui Nome comincia per ’A’.

SELECT NomeFROM ImpiegatiWHERE Nome LIKE ’A%’;

NomeAndreiAdami

Informatica Generale 40 sql.tex: Versione 1.0, aa 2006-2007

Page 41: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Confronto tra Stringhe di Caratteri (3)

Determinare tutti gli impiegati il cui Nome e composto daesattamente 4 lettere.

SELECT NomeFROM ImpiegatiWHERE Nome LIKE ’ ’;

NomeRosiNeriDare

Informatica Generale 41 sql.tex: Versione 1.0, aa 2006-2007

Page 42: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Confronto tra Stringhe di Caratteri (4)

Determinare tutti gli impiegati il cui Nome contiene la lettera ’o’.

SELECT NomeFROM ImpiegatiWHERE Nome LIKE ’%o%’;

NomeRosiRossiScottiFordi

Informatica Generale 42 sql.tex: Versione 1.0, aa 2006-2007

Page 43: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Ordinamento del Risultato di una Query

• Negli esempi visti, l’ordine delle tuple risultato di una interrogazionee determinato dal sistema (dipende dalla strategia usata per eseguirel’interrogazione);

• e possibile specificare un ordinamento diverso aggiungendo alla finedell’interrogazione la clausola ORDER BY;

• la clausola ORDER BY posta alla fine di una query permettedi ordinare le righe della relazione risultato rispetto ad uno o piudei suoi attributi. L’ordinamento puo essere crescente (metodo didefault) o decrescente.

Informatica Generale 43 sql.tex: Versione 1.0, aa 2006-2007

Page 44: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Ordinamento del Risultato di una Query

La sintassi e:

SELECT NomeTabella.Attributo [,NomeTabella.Attributo]...FROM NomeTabella [,NomeTabella]...[WHERE Condizione]ORDER BY NomeTabella.Attributo [asc|desc] [, NomeTabel-la.Attributo [asc|desc]]...

dove nella clausola ORDER BY

NomeTabella.Attributo [asc|desc] [, NomeTabella.Attributo [asc|desc]]...

e un elenco separato da virgole costituito dal nome di una delle relazioninella clausola FROM, seguito da un punto, seguito dal nome di unodegli attributi della relazione a sinistra del punto eventualmente seguitoda una tra le parole asc e desc.

Informatica Generale 44 sql.tex: Versione 1.0, aa 2006-2007

Page 45: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Ordinamento del Risultato di una Query

• La query costruisce il prodotto cartesiano delle relazioni nella clau-sola FROM, se la clausola WHERE e presente seleziona solole tuple che soddisfano il predicato in tale clausola, quindi la queryordina le righe della relazione rispetto agli attributi nella clausolaORDER BY, dove l’ordinamento sugli attributi piu a sinistra hapriorita rispetto all’ordinamento sugli attributi piu a destra e per ogniattributo la query applica il criterio decrescente se desc e specifica-to, crescente altrimenti e infine proietta solo le colonne specificatenella clausola select;

• la clausola ORDER BY e applicabile indipendentemente dallapresenza della clausola WHERE.

Informatica Generale 45 sql.tex: Versione 1.0, aa 2006-2007

Page 46: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Ordinamento del Risultato di una Query (1)

Elencare lo stipendio, la mansione e il nome di tutti gli impiegati deldipartimento 30, ordinando le tuple in ordine crescente in base allostipendio.

Informatica Generale 46 sql.tex: Versione 1.0, aa 2006-2007

Page 47: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Ordinamento del Risultato di una Query (2)

SELECT Stipendio, Mansione, Nome

FROM Impiegati

WHERE DipNum=30

ORDER BY Stipendio;

Stipendio Mansione Nome800,00 tecnico Andrei800,00 tecnico Bianchi800,00 segretaria Martini

1500,00 tecnico Turni1950,00 ingegnere Gianni2850,00 dirigente Blacchi

Informatica Generale 47 sql.tex: Versione 1.0, aa 2006-2007

Page 48: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Ordinamento del Risultato di una Query (2)

Esempio: si vuole elencare mansione, nome e stipendio di tutti gliimpiegati ordinando le tuple in base alla mansione in ordine crescente,ed in base allo stipendio in ordine decrescente

Informatica Generale 48 sql.tex: Versione 1.0, aa 2006-2007

Page 49: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Ordinamento del Risultato di una Query (3)

SELECT Mansione, Stipendio, NomeFROM ImpiegatiORDER BY Mansione, Stipendio DESC;

Mansione Stipendio Nomedirigente 3000, 00 Verdidirigente 2975, 00 Rosidirigente 2850, 00 Blacchiingegnere 2450, 00 Neriingegnere 2000, 00 Dareingegnere 1950, 00 Gianniingegnere 1600, 00 Rossiingegnere 1300, 00 Milliingegnere 1100, 00 Adamisegretaria 1000, 00 Fordisegretaria 800, 00 Martinisegretaria 800, 00 Scotti

tecnico 1500, 00 Turnitecnico 800, 00 Andreitecnico 800, 00 Bianchi

Informatica Generale 49 sql.tex: Versione 1.0, aa 2006-2007

Page 50: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Eliminazione dei Duplicati (1)

• Supponiamo di voler ritrovare la lista di tutte le mansioni presentinella relazione Impiegati

Informatica Generale 50 sql.tex: Versione 1.0, aa 2006-2007

Page 51: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Eliminazione dei Duplicati (1)

SELECT Mansione FROM Impiegati; Risultato

Mansioneingegnere

tecnicotecnico

dirigentesegretariadirigenteingegneresegretaria

tecnicoingegnereingegneresegretariaingegneredirigente

Informatica Generale 51 sql.tex: Versione 1.0, aa 2006-2007

Page 52: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Eliminazione dei Duplicati (2)

• E’ possibile richiedere l’eliminazione dei duplicati tramite la clausolaDISTINCTSELECT DISTINCT Mansione FROM Impiegati;

Mansioneingegnere

tecnicodirigentesegretaria

Informatica Generale 52 sql.tex: Versione 1.0, aa 2006-2007

Page 53: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Inserimento di Tuple

• In SQL, l’inserimento di nuove tuple nelle tabelle e ottenuto medianteil comando INSERT INTO. La sintassi del comando e moltoarticolata, qui di seguito ne presentiamo una versione semplificata:

INSERT INTO NomeTabella [(ListaDiAttributi)]VALUES (ListaDiValori)

dove nella clausola INSERT INTO

NomeTabella

e un nome di relazione creato con CREATETABLE e

ListaDiAttributi

e una lista compresa tra tonde e separata da virgole di nomi diattributo della relazione NomeTabella e nella clausola VALUES

ListaDiValori

e una lista di costanti separata da virgole.

Informatica Generale 53 sql.tex: Versione 1.0, aa 2006-2007

Page 54: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Inserimento di Tuple

• La query SQL INSERT INTO inserisce in NomeTabella una nuo-va tupla. I valori che compaiono in ListaDiValori vengono assegnatiposizionalmente o agli attributi elencati in ListaDiAttributi, se pre-sente, o agli attributi della relazione NomeTabella cosı come elencatinella CREATETABLE;

• Se ListaDiValori non contiene tante costanti quanti sono gli attributidella relazione, gli attributi per cui manca la costante assumerannovalore NULL.

Informatica Generale 54 sql.tex: Versione 1.0, aa 2006-2007

Page 55: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempi di Inserimento

INSERT INTO dipartimenti(nomedip, dipid,dirigente,divisione,ufficio)VALUES (’sviluppo’,40,8000,’D3’,3200);

INSERT INTO dipartimentiVALUES (50,’Edilizia Industriale’,7000,’D4’,8005);

INSERT INTO dipartimentiVALUES (60,’Esteri’);

DipId NomeDip Ufficio Divisione Dirigente10 Edilizia Civile 1100 D1 797720 Ricerche 2200 D1 756630 Edilizia Stradale 5100 D2 769840 sviluppo 3200 D3 800050 Edilizia Industriale 7000 D4 800560 Esteri

Informatica Generale 55 sql.tex: Versione 1.0, aa 2006-2007

Page 56: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Cancellazione di Tuple

• In SQL, la cancellazione di tuple e ottenuta mediante il costruttoDELETE FROM. La sintassi del comando e:

DELETE FROM NomeTabella [WHERE Condizione]

dove nella clausola DELETE FROM

NomeTabella

e un nome di relazione creata con CREATETABLE e nellaclausola WHERE

Condizione

e un predicato SQL.

• La query SQL cancella dalla relazione NomeTabella le tuple chesoddisfano la clausola la Condizione nella clausola WHERE;

• se la clausola WHERE non e presente vengono cancellate tutte letuple della relazione.

Informatica Generale 56 sql.tex: Versione 1.0, aa 2006-2007

Page 57: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Cancellazione di Tuple

• Si vuole cancellare il dipartimento 40:

DELETE FROM DipartimentiWHERE DipID = 40;

• Cancellare gli impiegati il cui nome comincia per ’R’:

DELETE FROM impiegati WHERE nome LIKE ’R%’;

• Si vogliono cancellare tutte le tuple della relazione Esami:

DELETE FROM Esami;

Informatica Generale 57 sql.tex: Versione 1.0, aa 2006-2007

Page 58: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Aggiornamento di Tuple (1)

• In SQL l’aggiornamento di tuple e ottenuto mediante il costruttoUPDATE. La sintassi del comando e articolata, di seguito nediamo una versione semplificata:

UPDATE NomeTabellaSET NomeAttributo= Espressione [, NomeAttributo= Espressio-ne]...[WHERE Condizione ]

dove nella clausola SET

NomeAttributo= Espressione [, NomeAttributo= Espressione]...

e un elenco separato da virgole costituito dal nome di uno degliattributi della relazione nella clausola UPDATE seguito dal sim-bolo = seguito da un’espressione che puo contenere operatori arit-metici e nomi di attributi della relazione specificata nella clausolaUPDATE.

Informatica Generale 58 sql.tex: Versione 1.0, aa 2006-2007

Page 59: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Aggiornamento di Tuple (2)

• La query SQL, per ogni tupla di NomeTabella che soddisfaCondizione procede come segue: per ogni elemento

NomeAttributo= Espressione

valuta Espressione e il valore calcolato viene assegnato aNomeAttributo nella tupla in questione;

• in ogni elemento NomeAttributo= Espressione dell’elenco nella clau-sola SET, il valore assunto da Espressione deve appartenere aldominio di NomeAttributo;

• se la clausola WHERE e mancante, tutte le tuple di NomeTabellavengono aggiornate.

Informatica Generale 59 sql.tex: Versione 1.0, aa 2006-2007

Page 60: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Aggiornamento (1)

• Aumentare di 100 lo stipendio di tutti i tecnici.

UPDATE ImpiegatiSET Stipendio = Stipendio + 100WHERE Mansione = ’tecnico’;

• Promuovere Gianni a dirigente e aumentare il suo stipendio del 10%.

UPDATE ImpiegatiSET Mansione = ’dirigente’, Stipendio = 1.10*StipendioWHERE Nome = ’Gianni’;

Informatica Generale 60 sql.tex: Versione 1.0, aa 2006-2007

Page 61: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Aggiornamento (2)

• Per ogni impiegato il cui premio di produzione e inferiore a 250fare quanto segue: aumentarne lo stipendio del valore del premio diproduzione e porre il premio di produzione a 50.

UPDATE ImpiegatiSET Stipendio=Stipendio+Premioprod, PremioProd=50WHERE PremioProd<250;

Informatica Generale 61 sql.tex: Versione 1.0, aa 2006-2007

Page 62: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Aggiornamento (3)

Impid Nome Mansione DataAss Stipendio PremioProd DipNum7369 Rossi ingegnere 1980-12-17 1600 500 207499 Andrei tecnico 1981-02-20 800 307521 Bianchi tecnico 1981-02-20 900 50 307566 Rosi dirigente 1981-04-02 2975 207654 Martini segretaria 1981-09-28 800 307698 Blacchi dirigente 1981-05-01 2850 307782 Neri ingegnere 1981-06-01 2650 50 107788 Scotti segretaria 1981-11-09 800 207839 Dare ingegnere 1981-11-17 2600 300 107844 Turni tecnico 1981-09-08 1500 307876 Adami ingegnere 1981-09-28 1100 500 207900 Gianni ingegnere 1981-12-03 1950 307902 Fordi segretaria 1981-12-03 1000 207934 Milli ingegnere 1982-01-23 1450 50 107977 Verdi dirigente 1980-12-10 3000 10

Informatica Generale 62 sql.tex: Versione 1.0, aa 2006-2007

Page 63: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Aggiornamento (2)

• Cambiare il nome del dipartimento ’Ricerche’ in ’Ricerca e Sviluppo’.

UPDATE dipartimenti SET NomeDip=’Ricerca e Sviluppo’WHERE NomeDip=’Ricerche’;

DipId NomeDip Ufficio Divisione Dirigente10 Edilizia Civile 1100 D1 797720 Ricerca e Sviluppo 2200 D1 756630 Edilizia Stradale 5100 D2 7698

Informatica Generale 63 sql.tex: Versione 1.0, aa 2006-2007

Page 64: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempi di Errori di Aggiornamento

• La seguente query SQL e sbagliata

UPDATE Impiegati SET DataAss=10WHERE Nome=’Verdi’;

• perche il dominio di DataAss e Date e 10 e un intero;

• La seguente query SQL e sbagliata

UPDATE Impiegati SET DataAss=’32-15-1980’WHERE Nome=’Verdi’;

• perche il dominio di DataAss e Date e ’32-15-1980’ non e una datavalida;

Informatica Generale 64 sql.tex: Versione 1.0, aa 2006-2007

Page 65: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Collegamento tra Dati

• La nozione di join (collegamento) e di fondamentale importanza inquanto permette di correlare dati rappresentati da relazioni diverse;

• In SQL cosı come in algebra relazionale tale correlazione e realizzatatramite il prodotto cartesiano:

• prendiamo il seguente esempio: determinare il nome del dipartimentoin cui lavora l’impiegato Rossi, la cui soluzione e data dalla querySQL

SELECT NomeDipFROM Impiegati, DipartimentiWHERE Nome = ’Rossi’ AND

Impiegati.DipNum = Dipartimenti.DipID;

• Impiegati.DipNum = Dipartimenti.DipID viene detto predicato dijoin perche vi compaiono attributi di tabelle diverse.

Informatica Generale 65 sql.tex: Versione 1.0, aa 2006-2007

Page 66: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Join (1)

Per ogni impiegato selezionare il nome, lo stipendio, la mansione eil nome del dipartimento in cui lavora. Ordinare le tuple in ordinecrescente in base al nome del dipartimento, ed in ordine decrescentein base allo stipendio.

SELECT NomeDip, Nome, Mansione, StipendioFROM Impiegati, DipartimentiWHERE Impiegati.DipNum = Dipartimenti.DipIDORDER BY NomeDip, Stipendio DESC;

Informatica Generale 66 sql.tex: Versione 1.0, aa 2006-2007

Page 67: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Risultato

NomeDip Nome Mansione stipendioEdilizia Civile Verdi dirigente 3000, 00Edilizia Civile Neri ingegnere 2450, 00Edilizia Civile Dare ingegnere 2000, 00Edilizia Civile Milli ingegnere 1300, 00

Edilizia Stradale Blacchi dirigente 2850, 00Edilizia Stradale Gianni ingegnere 1950, 00Edilizia Stradale Turni tecnico 1500, 00Edilizia Stradale Andrei tecnico 800, 00Edilizia Stradale Bianchi tecnico 800, 00Edilizia Stradale Martini segretaria 800, 00

Ricerche Rosi dirigente 2975, 00Ricerche Rossi ingegnere 1600, 00Ricerche Adami ingegnere 1100, 00Ricerche Fordi segretaria 1000, 00Ricerche Scotti segretaria 800, 00

Informatica Generale 67 sql.tex: Versione 1.0, aa 2006-2007

Page 68: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Join (2)

Determinare per ogni impiegato il nome del proprio dipartimento.

SELECT nome, nomedipFROM impiegati, dipartimentiWHERE dipnum=dipid;

Informatica Generale 68 sql.tex: Versione 1.0, aa 2006-2007

Page 69: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Join (3)

Per ogni dirigente determinare il nome del dipartimento che dirige.

SELECT nome, nomedipFROM impiegati, dipartimentiWHERE mansione=’dirigente’ and dipnum=dipid;

Nome NomeDipRosi RicercheBlacchi Edilizia StradaleVerdi Edilizia Civile

Informatica Generale 69 sql.tex: Versione 1.0, aa 2006-2007

Page 70: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Join (4)

Selezionare i nomi degli impiegati che non lavorano nel dipartimentoRicerche.

SELECT nomeFROM impiegati, dipartimentiWHERE dipnum=dipid and nomedip <>’Ricerche’;

Informatica Generale 70 sql.tex: Versione 1.0, aa 2006-2007

Page 71: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Join (5)

Di ogni impiegato che guadagna piu di 2000 selezionare il suo numerodi matricola e quello del suo dirigente.

SELECT impid,dirigenteFROM impiegati, dipartimentiWHERE dipnum=dipid and stipendio>2000

Informatica Generale 71 sql.tex: Versione 1.0, aa 2006-2007

Page 72: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Join (6)

Di ogni impiegato non dirigente che guadagna piu di 2000 selezionareil suo numero di matricola e quello del suo dirigente.

SELECT impid,dirigenteFROM impiegati, dipartimentiWHERE dipnum=dipid AND stipendio>2000 ANDMansione<>’dirigente’;

Informatica Generale 72 sql.tex: Versione 1.0, aa 2006-2007

Page 73: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Join (7)

Determinare i voti dello studente Rossi Mario;

SELECT votoFROM esami,studentiWHERE Nome=’Mario’ AND Cognome=’Rossi’ AND Matrico-la=Studente;

Informatica Generale 73 sql.tex: Versione 1.0, aa 2006-2007

Page 74: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Join (8)

Selezionare i voti ottenuti negli esami di Analisi I.

SELECT votoFROM esami,corsiWHERE Nome=’Analisi I’ AND Corso=Id;

Informatica Generale 74 sql.tex: Versione 1.0, aa 2006-2007

Page 75: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Join (9)

Determinare i numeri di matricola degli studenti che hanno fattol’esame con il prof. Fermi

SELECT StudenteFROM Esami,CorsiWHERE Docente=’Fermi’ AND Corso=Id;

Informatica Generale 75 sql.tex: Versione 1.0, aa 2006-2007

Page 76: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Join (10)

Per ogni esame sostenuto selezionare Cognome e Nome dellostudente e il docente con cui e stato sostenuto.

SELECT Studenti.Nome,Cognome,DocenteFROM esami,corsi,studentiWHERE Corso=Id AND Matricola=Studente;

Informatica Generale 76 sql.tex: Versione 1.0, aa 2006-2007

Page 77: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Join (11)

Determinare i cognomi e i nomi degli studenti che hanno fattol’esame con il prof. Fermi.

• SELECT Studenti.Nome,Studenti.CognomeFROM studenti,corsi,esamiWHERE docente=’Fermi’ and corso=id and matricola=studente;

Cognome NomeRossi MarioVerdi Giovanni

Informatica Generale 77 sql.tex: Versione 1.0, aa 2006-2007

Page 78: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Rinomina Di Attributi e Relazioni

Mediante il costrutto SELECT FROM SQL consente di:

• cambiare il nome degli attributi che compaiono nella clausola SE-LECT. Per fare questo e sufficiente nella clausola SELECT farseguire all’attributo che si vuole rinominare la parola chiave AS e ilnuovo nome di attributo;

• cambiare il nome delle relazioni che compaiono nella clausolaFROM. Per fare questo e sufficiente nella clausola FROM farseguire alla relazione che si vuole rinominare il suo nuovo nome.

Con questo meccanismo una relazione puo occorrere piu volte nell’e-lenco associato alla clausola FROM, purche vi occorra con un nuo-vo nome. Quindi il meccanismo della rinomina permette di superareil vincolo di pagina 18.

Informatica Generale 78 sql.tex: Versione 1.0, aa 2006-2007

Page 79: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Rinomina Di Attributi e Relazioni (2)

La sintassi quindi e:

SELECT NomeTabella.Attributo [AS Alias] [,NomeTabel-la.Attributo [AS Alias]]...FROM NomeTabella [Alias] [,NomeTabella [Alias]]...[WHERE]

dove nella clausola SELECT

NomeTabella.Attributo [AS Alias] [,NomeTabella.Attributo [ASAlias]]...

e un elenco separato da virgole in cui NomeTabella e il nome di un aliasdi relazione o di una relazione priva di alias nella clausola FROM.

• La query rinomina le tabelle della clausola FROM aventi un alias,quindi costruisce il prodotto cartesiano delle tabelle nella clauso-la FROM e della relazione cosı ottenuta proietta solo le colonnespecificate nella lista in corrispondenza di SELECT rinominandoquelle colonne che possiedono un alias.

Informatica Generale 79 sql.tex: Versione 1.0, aa 2006-2007

Page 80: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Rinomina di Attributi

SELECT nome as NOME, nomedip as DIPARTIMENTOFROM impiegati, dipartimenti DIPWHERE mansione=’dirigente’ and impiegati.dipnum=DIP.dipid;

NOME DIPARTIMENTORosi RicercheBlacchi Edilizia StradaleVerdi Edilizia Civile

Informatica Generale 80 sql.tex: Versione 1.0, aa 2006-2007

Page 81: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Rinomina di Attributi

Determinare la matricola degli studenti che hanno il medesimocognome.

SELECT Studenti.Matricola,K.MatricolaFROM Studenti, Studenti KWHERE Studenti.Cognome=K.Cognome;

Informatica Generale 81 sql.tex: Versione 1.0, aa 2006-2007

Page 82: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Rinomina di Attributi

Di ogni impiegato determinare il nome del suo dirigente.

SELECT impiegati.nome, DIR.nomeFROM impiegati, dipartimenti, impiegati DIRWHERE impiegati.dipnum=dipartimenti.dipid AND dipartimen-ti.dirigente=DIR.impid

Informatica Generale 82 sql.tex: Versione 1.0, aa 2006-2007

Page 83: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Espressioni e Funzioni Aritmetiche

•Mediante il costrutto SELECTFROM, SQL consente di calcolarevalori di espressioni aritmetiche a partire dai valori assunti, su unoo piu attributi, dalle tuple della relazione costruita nella clausolaFROM;

• tali espressioni sono formulate applicando gli operatori aritmetici(+,−, ∗, /) ai valori assunti dalle tuple sugli attributi della relazione;

• il risultato di questa caratteristica e quello di ottenere per proiezionerelazioni in cui uno o piu attributi sono calcolati a partire dagli attri-buti presenti nella relazione di partenza. Questi attributi sono nuovi,non presenti in nessuna delle relazioni della clausola FROM.

Informatica Generale 83 sql.tex: Versione 1.0, aa 2006-2007

Page 84: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Espressioni e Funzioni Aritmetiche (2)

• La sintassi del costrutto SELECTFROM e quindi

SELECT Espressione [AS Alias] [,Espressione [AS Alias]]...FROM NomeTabella [AS Alias] [,NomeTabella [AS Alias]]...

dove nella clausola SELECT

Espressione [AS Alias] [,Espressione [AS Alias]]...

e un elenco separato da virgole in cui Espressione puo essere deltipo NomeTabella.Attributo come visto nei lucidi precedenti o unaespressione aritmetica in cui gli operandi sono numeri o elementi deltipo NomeTabella.Attributo.

• Come osservato nei casi precedenti se NomeTabella.Attributo com-pare nella clausola SELECT allora NomeTabella deve comparirenella clausola FROM.

Informatica Generale 84 sql.tex: Versione 1.0, aa 2006-2007

Page 85: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Uso di Espressioni e Funzioni Aritmetiche

Di ogni impiegato selezionare il nome, lo stipendio e calcolarne ildoppio. Chiamare DOPPIO la colonna calcolata.

SELECT nome,stipendio,stipendio*2 as Doppio FROM Impie-gati; nome stipendio Doppio

Andrei 800 1600

Rosi 2975 5950

Rossi 1600 3200

Bianchi 800 1600

Martini 800 1600

Blacchi 2850 5700

Neri 2450 4900

Scotti 800 1600

Dare 2600 5200

Turni 1500 3000

Adami 1100 2200

Gianni 1950 3900

Fordi 1000 2000

Milli 1300 2600

Verdi 3000 6000

Informatica Generale 85 sql.tex: Versione 1.0, aa 2006-2007

Page 86: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Uso di Espressioni e Funzioni Aritmetiche

Trovare il nome, lo stipendio, il premio di produzione, e la sommadello stipendio e del premio di produzione di tutti gli ingegneri;

SELECT Nome, Stipendio, PremioProd, Stipendio + PremioProdFROM ImpiegatiWHERE Mansione = ’ingegnere’;

Nome Stipendio PremioProd Stipendio + PremioProdRossi 1600, 00 500, 00 2100, 00Neri 2450, 00 200, 00 2650, 00Dare 2000, 00 300, 00 2300, 00

Adami 1100, 00 500, 00 1600, 00Gianni 1950, 00 ? ?Milli 1300, 00 150, 00 1450, 00

Informatica Generale 86 sql.tex: Versione 1.0, aa 2006-2007

Page 87: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Uso di Espressioni e Funzioni Aritmetiche

Trovare il nome, lo stipendio, il premio di produzione, e la sommadello stipendio e del premio di produzione di tutti gli ingegneri percui la somma dello stipendio e del premio di produzione e maggioredi 2000

SELECT Nome, Stipendio, PremioProd, Stipendio + PremioProdFROM ImpiegatiWHERE Mansione = ’ingegnere’ AND Stipendio + PremioProd> 2000;

Nome Stipendio PremioProd Stipendio + PremioProdRossi 1600, 00 500, 00 2100, 00Neri 2450, 00 200, 00 2650, 00Dare 2000, 00 300, 00 2300, 00

Informatica Generale 87 sql.tex: Versione 1.0, aa 2006-2007

Page 88: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Espressioni e Funzioni Aritmetiche

• Una espressione aritmetica usata nella clausola di proiezione di un’in-terrogazione da luogo ad una colonna, detta virtuale, non presentenella relazione su cui si effettua l’interrogazione

• Le colonne virtuali non sono fisicamente memorizzate; sono solomaterializzate come risultato delle interrogazioni

• Nel calcolo delle espressioni aritmetiche la presenza del valore nullorende l’espressione indefinita.

Informatica Generale 88 sql.tex: Versione 1.0, aa 2006-2007

Page 89: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

SQL - Funzioni scalari

• Non sono fornite in tutte le implementazioni di SQL.

Funzioni:• abs(n) calcola il valore assoluto del valore numerico n.•mod(n, b) calcola il resto intero della divisione di n per b.• sqrt(n) calcola la radice quadrata del valore numerico n.

• Alcuni DBMS supportano anche funzioni trigonometriche e funzioniper il calcolo della parte intera superiore ed inferiore

• Le funzioni possono essere usate nella clausola di proiezione e nellaclausola WHERE

Informatica Generale 89 sql.tex: Versione 1.0, aa 2006-2007

Page 90: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Operazioni Insiemistiche con SQL (1)

• Le operazioni insiemistiche di unione, intersezione, differenza, nonpossono essere espresse con una singola SELECT.

• In SQL l’unione di due relazioni e realizzata mediante il costruttoUNION. La sintassi del comando e la seguente:

SelectSQL UNION [ALL] SelectSQL

dove SelectSQL e una query SQL realizzata col comando SELECT.

• La query SQL realizza l’unione delle tuple contenute nelle relazionigenerate dalle due query che sono argomento di UNION. Le tupleduplicate sono rimosse a meno che non sia presente ALL.

• Le due relazioni argomento di UNION devono avere una strutturacompatibile, ovvero stesso numero di attributi definiti sullo stessodominio.

Informatica Generale 90 sql.tex: Versione 1.0, aa 2006-2007

Page 91: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Operazioni Insiemistiche con SQL (2)

• In SQL l’intersezione di due relazioni e realizzata mediante ilcostrutto INTERSECT. La sintassi del comando e la seguente:

SelectSQL INTERSECT SelectSQL

dove SelectSQL e una query SQL realizzata col comando SELECT.

• La query SQL realizza l’intersezione delle tuple contenute nel-le relazioni generate dalle due query che sono argomento diINTERSECT.

• Le due relazioni argomento di INTERSECT devono avere unastruttura compatibile.

Informatica Generale 91 sql.tex: Versione 1.0, aa 2006-2007

Page 92: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Operazioni Insiemistiche con SQL (3)

• In SQL la differenza di due relazioni e realizzata mediante il costruttoEXCEPT. La sintassi del comando e la seguente:

SelectSQL EXCEPT SelectSQL

dove SelectSQL e una query SQL realizzata col comando SELECT.

• La query SQL realizza la differenza insiemistica delle tuple conte-nute nelle relazioni generate dalle due query che sono argomento diEXCEPT.

• Le due relazioni argomento di EXCEPT devono avere unastruttura compatibile.

Informatica Generale 92 sql.tex: Versione 1.0, aa 2006-2007

Page 93: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Uso di EXCEPT

•Determinare i numeri di matricola degli studenti che NON hannofatto esami;

(SELECT Matricola FROM Studenti) EXCEPT(SELECT Studente FROM Esami);

•Determinare i numeri di matricola degli studenti che NON hannofatto l’esame K09.

(SELECT Matricola FROM Studenti) EXCEPT(SELECT Studente FROM Esami WHERE Corso=’K09’);

• determinare Cognome e Nome degli studenti che NON hanno fattol’esame K09;

(SELECT Nome,Cognome FROM Studenti) EXCEPT(SELECT Nome,Cognome FROM studenti,esami WHEREMatricola=Studente AND Corso=’K09’);

Informatica Generale 93 sql.tex: Versione 1.0, aa 2006-2007

Page 94: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Uso Errato degli Operatori Insiemistici (1)

• Le seguenti query NON sono corette perche gli attributi Nome eVoto appartengono a domini non compatibili:

(SELECT Nome FROM Studenti) UNION(SELECT Voto FROM esami);

(SELECT Nome FROM Studenti) INTERSECT(SELECT Voto FROM esami);

(SELECT Nome FROM Studenti) EXCEPT(SELECT Voto FROM esami);

Informatica Generale 94 sql.tex: Versione 1.0, aa 2006-2007

Page 95: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Uso Errato degli Operatori Insiemistici (2)

• Le seguenti query NON sono corrette perche gli operandi deglioperatori insiemistici non hanno lo stesso numero di attributi:

(SELECT Nome, Cognome FROM Studenti) EXCEPT(SELECT cognome FROM studenti);

(SELECT Nome, Cognome FROM Studenti) UNION(SELECT cognome FROM studenti);

(SELECT Nome, Cognome FROM Studenti) INTERSECT(SELECT cognome FROM studenti);

Informatica Generale 95 sql.tex: Versione 1.0, aa 2006-2007

Page 96: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Query Aggregate

• Le query aggregate non possono essere espresse in algebrarelazionale;

• esse sono utili dal punto di vista pratico;

• le query aggregate si basano sugli operatori aggregati:

count,sum,min,max,avg;

Informatica Generale 96 sql.tex: Versione 1.0, aa 2006-2007

Page 97: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

L’Operatore count (1)

• L’operatore count restituisce il numero di righe o di valori distinti;

• count puo essere invocato in tre modi diversi:

SELECT count(*)FROM NomeTabella [,NomeTabella]...[WHERE Condizione]

la query costruisce il prodotto cartesiano delle relazioni nella clausolaFROM, seleziona solo le tuple che soddisfano il predicato nella clau-sola WHERE, se presente, e quindi restituisce il numero di tuplenella relazione.

Informatica Generale 97 sql.tex: Versione 1.0, aa 2006-2007

Page 98: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

L’Operatore count (2)

SELECT count(DISTINCT NomeTabella.Attributo)FROM NomeTabella [,NomeTabella]...)[WHERE Condizione]

la query costruisce il prodotto cartesiano delle relazioni nella clausolaFROM, se la clausola WHERE e presente seleziona solo le tupleche ne soddisfano il predicato, proietta la colonna specificata nella listain corrispondenza di SELECT e restituisce il numero di tuple DI-STINTE che la compongono (le tuple NULL non vengono contate).

Informatica Generale 98 sql.tex: Versione 1.0, aa 2006-2007

Page 99: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

L’Operatore count (3)

SELECT count([ALL] NomeTabella.Attributo)FROM NomeTabella [,NomeTabella]...)[WHERE Condizione]

la query costruisce il prodotto cartesiano delle relazioni nella clausolaFROM, se la clausola WHERE e presente seleziona solo le tupleche ne soddisfano il predicato, proietta la colonna specificata nella listain corrispondenza di SELECT e restituisce il numero di tuple nonNULL che la compongono.

Informatica Generale 99 sql.tex: Versione 1.0, aa 2006-2007

Page 100: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Uso di count (1)

Calcolare il numero di impiegati;

SELECT count(*)FROM Impiegati;

count15

Informatica Generale 100 sql.tex: Versione 1.0, aa 2006-2007

Page 101: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Uso di count (2)

Calcolare il numero di ingegneri;

SELECT count(*)FROM ImpiegatiWHERE Mansione=’ingegnere’;

count6

Informatica Generale 101 sql.tex: Versione 1.0, aa 2006-2007

Page 102: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Uso di count (3)

Calcolare il numero di mansioni diverse;

SELECT count( DISTINCT Mansione)FROM Impiegati;

count4

Informatica Generale 102 sql.tex: Versione 1.0, aa 2006-2007

Page 103: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Uso di count (4)

Calcolare quanti ingegneri lavorano nel dipartimento 30;

SELECT count(*)FROM ImpiegatiWHERE Mansione=’ingegnere’ AND DipNum=30;

count1

Informatica Generale 103 sql.tex: Versione 1.0, aa 2006-2007

Page 104: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Uso di count (5)

Calcolare quanti Impiegati lavorano nel dipartimento ’Ricerche’;

SELECT count(*)FROM Impiegati, DipartimentiWHERE DipNum=DipID AND NomeDip=’Ricerche’;

count5

Informatica Generale 104 sql.tex: Versione 1.0, aa 2006-2007

Page 105: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Gli Operatori sum, max, min, avg

Gli Operatori sum, max, min, avg restuiscono rispettivamente som-ma, massimo, minimo, media. Gli operatori vengono invocati tutti conla medesima sintassi. Qui come esempio consideriamo la sintassi disum.

Informatica Generale 105 sql.tex: Versione 1.0, aa 2006-2007

Page 106: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Gli Operatori sum, max, min, avg

SELECT sum(DISTINCT FormulaConAttributi)FROM NomeTabella [,NomeTabella]...[WHERE Condizione]

dove

FormulaConAttributi

nella clausola SELECT e una espressione aritmetica contenente ope-ratori aritmetici ed espressioni del tipo NomeTabella.Attributo doveNomeTabella e una delle relazioni elencate nella clausola FROM.

La query costruisce il prodotto cartesiano delle relazioni nella clausolaFROM, se la clausola WHERE e presente seleziona solo le tupleche ne soddisfano il predicato, proietta le colonne della relazione checompaiono in FormulaConAttributi, per ogni tupla calcola il valore dellaformula FormulaConAttributi e quindi ne esegue il totale considerandosolo i valori distinti.Informatica Generale 106 sql.tex: Versione 1.0, aa 2006-2007

Page 107: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Gli Operatori sum, max, min, avg

SELECT sum([ALL] FormulaConAttributi)FROM NomeTabella [,NomeTabella]...)[WHERE Condizione]

la query costruisce il prodotto cartesiano delle relazioni nella clausolaFROM, se la clausola WHERE e presente seleziona solo le tupleche ne soddisfano il predicato, proietta le colonne della relazione checompaiono in FormulaConAttributi, per ogni tupla calcola il valore dellaformula FormulaConAttributi e quindi ne esegue il totale considerandotutti i valori.

Informatica Generale 107 sql.tex: Versione 1.0, aa 2006-2007

Page 108: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Uso degli Operatori Aggregati

Determinare la somma degli stipendi degli impiegati;

SELECT sum(ALL stipendio)FROM Impiegati

sum25525

equivalente a

SELECT sum(stipendio)FROM Impiegati

Determinare la somma degli stipendi degli impiegati, sommandoquelli uguali una sola volta;

SELECT sum(DISTINCT stipendio)FROM Impiegati

sum23125

Informatica Generale 108 sql.tex: Versione 1.0, aa 2006-2007

Page 109: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Esempio di Uso degli Operatori Aggregati

Determinare la somma degli stipendi piu il premio di produzione degliingegneri;

SELECTsum (stipendio+premioprod) FROM impiegatiWHERE mansione=’ingegnere’;

sum10700

Determinare la media degli stipendi piu il premio di produzione degliingegneri;

SELECTavg (stipendio+premioprod) FROM impiegatiWHERE mansione=’ingegnere’;

avg2140

Informatica Generale 109 sql.tex: Versione 1.0, aa 2006-2007

Page 110: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Gli Operatori Aggregati

Nella sua forma piu generale una query aggregata ha la seguentesintassi:

SELECT OperatoreAggregato [AS Alias] [,OperatoreAggregato[AS Alias]]...FROM NomeTabella [,NomeTabella]...[WHERE Condizione]

quindi la clausola SELECT puo essere seguita da un numeroarbitrario di operatori aggregati.

Informatica Generale 110 sql.tex: Versione 1.0, aa 2006-2007

Page 111: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Uso degli Operatori Aggregati

Calcolare la media, il massimo ed il totale degli stipendi e il totaledei premi di produzione degli impiegati;

SELECTmax (Stipendio) AS StipMax, avg (Stipendio) AS Sti-pMed, min (Stipendio) AS StipMin, sum (Stipendio)AS StipTot, sum (PremioProd) AS PremioProdTotFROM Impiegati;

StipMax StipMed StipMin StipTot PremioProdTot3000 1701.66666666667 800 25525 1750

Determinare la somma e la media degli stipendi nel caso in cui lostipendio venga aumentato del 10%;

SELECTsum (Stipendio*1.1), avg (Stipendio*1.1)FROM impiegati;

sum avg28077.5 1871.83333333333

Informatica Generale 111 sql.tex: Versione 1.0, aa 2006-2007

Page 112: Linguaggio SQL (1) - DISCo · SQL come Linguaggio di Query Le query scritte in SQL esprimono le propriet a che il rusultato deve soddisfare e non il modo in cui ottenere tale risultato

Gli Operatori Aggregati

• per quanto illustrato fino ad ora la clausola SELECT ha solo edesclusivamente due forme possibili:

SELECT Espressione [AS Alias] [,Espressione [AS Alias]]...

SELECT OperatoreAggregato [AS Alias] [,OperatoreAggregato[AS Alias]]...

• E scorretto mischiare le due sintassi, quindi la lista che segue laclausola SELECT deve essere omogenea: o una lista espressio-ni costruite come specificato a pagina 84 o una lista di operatoriaggregati. La query SQL

SELECT sum(stipendio), nomeFROM impiegati

e scorretta.

Informatica Generale 112 sql.tex: Versione 1.0, aa 2006-2007