corso sql

107
 Definizione e interrogazione di basi di dati o 2007 SIMONA CAMARDA FABIO MAZZINI

Upload: genovoffa

Post on 19-Jul-2015

495 views

Category:

Documents


0 download

DESCRIPTION

corso elementare sul linguaggio sql di sql server di microsoft

TRANSCRIPT

Page 1: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 1/107

Definizione e interrogazione di basidi dati

o 2007

SIMONA CAMARDA

FABIO MAZZINI

Page 2: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 2/107

SQLIl nome SQL è un acronimo per Structured Query Language.

È un linguaggio utilizzato per la gestione dei database cheassolve le funzioni di:

DDL (Data Definition Language ):descrizione dei dati e delle strutture

(definizione di domini, tabelle, indici, autorizzazioni, viste,vincoli, procedure, trigger)DML (Data Manipulation Language):

manipolazione dei dati ed interrogazione

 Transact-SQL (da qui in avanti, T-SQL) è la versione di SQLutilizzata da Microsoft SQL Server. È una versione proprietariadi SQL, di cui mantiene i costrutti base, ma forniscefunzionalità aggiuntive per la manipolazione e l'estrazione deidati. Il T-SQL è a tutti gli effetti un linguaggio di

programmazione completo, che fornisce tutte le istruzioni e leclausole per la definizione di variabili, flussi di controllo, 2

Page 3: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 3/107

Parte primaSQL - DATA DEFINITION LANGUAGE

o 2007

Page 4: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 4/107

DDLIl Data Definition Language (DDL) contiene le parole chiavi e le

istruzione necessarie per definire, modificare o eliminare tuttigli oggetti di un database: tabelle, viste procedure, funzioni,ruoli, privilegi…Permette anche di definire degli indici (delle chiavi di ricerca),specificare dei collegamenti tra le tabelle ed imporre dei

vincoli relazionale tra le tabelle del database.

I comandi più importanti sono: CREATE ALTER

DROP

4

Page 5: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 5/107

IdentificatoriIl nome completo di un oggetto è composto da 4 identificatori:

[ [ [ server. ] [ database ] . ] [ schema ] . ] oggetto

Quando si fa riferimento a un oggetto, non è semprenecessario specificare i qualificatori server, database eproprietario. In tal caso verranno considerati server edatabase correnti. Se non è specificato il qualificatore delloschema, il motore assume che stiamo lavorando sullo schemadi default dbo.

5

Page 6: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 6/107

CREATE Tramite la parola chiave CREATE è possibile definire

qualunque nuova entità all'interno del database.La clausola CREATE è seguita dalla tipologia di oggetto chevogliamo definire (TABLE, VIEW, INDEX…) e dal nome cheintendiamo assegnargli:

CREATE [ TABLE | VIEW | FUNCTION | …] entità

Le entità di uso più comune che è possibile creare sono, adesempio:

 Tabelle: CREATE TABLE tabella… Viste: CREATE VIEW vista AS… Indici: CREATE [ CLUSTERD | NONCLUSTERED ] INDEX indice 

ON… Funzioni: CREATE FUNCTION funzione… Procedure: CREATE PROCEDURE procedura… 6

Page 7: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 7/107

ALTERLa parola chiave ALTER permette di modificare una qualsiasi

entità del database. Ha la stessa sintassi di CREATE:

ALTER [TABLE | VIEW | FUNCTION | …] entità

Per quanto riguarda le tabelle, ad esempio, tramite ALTER è

possibile aggiungere o rimuovere colonne, ridefinire le colonneesistenti, creare o modificare i vincoli relazionali e così via.

7

Page 8: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 8/107

DROPLa parola chiave DROP permette di eliminare qualunque entità

del database, compreso il database stesso. Si tratta dunque diun'istruzione da utilizzare con una certa cautela…

La sintassi è la stessa di CREATE e ALTER:

DROP [TABLE | VIEW | FUNCTION | …] entità

NOTA BENE:L'istruzione di DROP, così come tutte le istruzioni di tipo DDL,

non è transazionale: questo significa che una volta eseguitanon è possibile tornare indietro!

8

Page 9: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 9/107

CREATE TABLE (1) Tramite l'istruzione CREATE TABLE è possibile definire la

struttura di una nuova tabella e crearne un'istanza vuota.Si tratta di un'istruzione con una sintassi estremamentecomplessa, in quanto permette, nello stesso momento didefinire:

le colonne della tabella: nome, tipo dato, lunghezza, valori didefault, vincoli...

la chiave primaria, se presente i vincoli relazionali (chiavi esterne) il filegroup sul quale risiederà la tabella

lo schema di appartenenza

E molto altro ancora.

9

Page 10: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 10/107

CREATE TABLE (2)Sintassi di esempio per la creazione di una semplice tabella

con 3 colonne, una chiave primaria e la definizione di unvincolo di integrità referenziale (chiave esterna) verso unaseconda tabella:

CREATE TABLE Tabella (

Colonna1 int NOT NULL,Colonna2 varchar (100) NULL,Colonna3 char (3) NULL,CONSTRAINT PK_Tabella PRIMARY KEY CLUSTERED (

Colonna1 ASC

),CONSTRAINT FT_Tabella_AltraTabella FOREIGN KEY (Colonna3)

REFERENCES AltraTabella ( AltraColonna)) ON [PRIMARY]

10

Page 11: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 11/107

 Tipi dati T-Sql (1)Formati numerici esatti

bigint da -2^63 (-9,223,372,036,854,775,808) a 2^63-1(9,223,372,036,854,775,807)

int da -2^31 (-2,147,483,648) a 2^31-1(2,147,483,647)

smallint da -2^15 (-32,768) a 2^15-1 (32,767) tinyint da 0 a 255 bit 0/1, TRUE/FALSE decimal(p,s) p (precisione), numero massimo di cifre, sia

intere che decimali, 1 <= p <= 18 (default 18)

s (scala) , numero massimo di cifre decimali, 0<= s <= p numeric(p,s) equivalente a decimalmoney Da -922.337.203.685.477,5808 a

922.337.203.685.477,5807

smallmoney Da -214.748,3648 a 214.748,3647 11

Page 12: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 12/107

 Tipi dati T-Sql (2)Formati numerici approssimati a virgola mobile

float(n) Da - 1,79E+308 a -2,23E-308, 0 e da 2,23E-308 a1,79E+308

1 <= n <= 53 (default 53) real Da - 3,40E + 38 a -1,18E - 38, 0 e da 1,18E - 38 a

3,40E + 38equivalente a float(24)

Formati di data e ora

datetime dal 1 gennaio 1753 al 31 dicembre 9999(accuratezza 3,33 millisecondi)

smalldatetime dal 1 gennaio 1900 al 6 giugno 2079(accuratezza 1 minuto)

12

Page 13: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 13/107

 Tipi dati T-Sql (3)Formati di testo

char(n) stringhe non-unicode a lunghezza fissa con lunghezzadi n byte, dove n rappresenta un valore compreso tra1 e 8.000 (default 1)

varchar(n|max) stringhe non-unicode a lunghezza variabile

con lunghezza di n byte, 1 <= n <= 8.000(default 1) max = 2^31-1 byte (2.147.483.647 caratteri)

text stringhe non-unicode a lunghezza variabile conlunghezza massima di 2^31-1 byte (2.147.483.647caratteri)

nchar(n) stringhe unicode a lunghezza fissa con lunghezza di nbyte, dove n rappresenta un valore compreso tra 1e 4.000 (default 1)

nvarchar(n|max) stringhe unicode a lunghezza variabile conlunghezza di n byte, 1 <= n <= 4.000

(default 1) max = 2^30-1 byte (1.073.741.823 caratteri) 13

Page 14: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 14/107

 Tipi dati T-Sql (4)Formati di testo

binary(n) dati binari a lunghezza fissa con lunghezza di n byte,dove n rappresenta un valore compreso tra1 e 8.000

varbinary(n|max) dati binari a lunghezza variabile con lunghezzadi n byte, 1 <= n <= 8.000

max = 2^31-1 byte image dati binari a lunghezza variabile da 0 a 2^31-1 byte

Formato table

l formato table è un tipo di dati speciale utilizzabile per

archiviare un set di risultati per l'elaborazione successiva.Viene utilizzato principalmente come spazio diarchiviazione temporanea di un set di righe restituito, adesempio come set di risultati di una funzione valutata alivello di tabella. La loro definizione è in tutto e per tutto

simile alla definizione di una tabella:DECLARE @tabella TABLE (campo varchar(10)) 14

Page 15: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 15/107

Vincoli intrarelazionaliI vincoli intrarelazionali sono vincoli che interessano una sola

tabella. Si possono suddividere in tre tipologie:Vincoli di definizione (o di cella) - il valore contenuto in una

cella dipende unicamente dalla sua definizione: Tipo dato: definisce se il contenuto della colonna sarà numerico,

alfanumerico, ecc. Null / not null: specifica se la colonna accetta / non accetta valori NULL

Vincoli di colonna – il valore di una cella dipende dalla suadefinizione e dal contenuto delle altre celle della medesimacolonna: Identity : il valore della colonna viene assegnato in modo automatico e

univoco

Primary key: identifica la colonna (o il set di colonne) contenente valoriche identificano in modo univoco una riga in una tabella Unique: garantisce l'univocità dei valori in una colonna Check :(sulla colonna): assicura l'integrità di dominio limitando i valori

accettati da una colonnaVincoli di riga – il valore di una cella dipende dalla sua

definizione e dal contenuto delle altre celle della medesima riga: Check (sulla riga)  15

Page 16: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 16/107

Vincoli interrelazionaliSono vincoli che definiscono legami tra due o più tabelle:

FOREIGN KEY:Il vincolo interrelazionale più utilizzato è quello di integritàreferenziale: gli attributi di una data tabella possono assumeresoltanto dei valori specificati in un'altra tabella, ossia definisconoil cosiddetto dominio dei dati.

16

Page 17: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 17/107

PRIMARY KEYIdentifica la colonna o il set di colonne contenente valori che

identificano in modo univoco una riga in una tabella.

Si può utilizzare una sola volta per ogni tabella. Tutte le colonne definite in un vincolo PRIMARY KEY devono

essere definite come NOT NULL.

Può essere dichiarata in fase di creazione della tabella, nella definizione dell'attributo,

ad esempio:Matricola varchar(6) PRIMARY KEY

oppure successivamente tramite una clausola di ALTER TABLE,

ad esempio:ALTER TABLE nometabella ADD CONSTRAINT

nomePrimaryKey PRIMARY KEY(campo1 [ASC | DESC], campo2 [ASC |

DESC], … )

ON [PRIMARY] 17

Page 18: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 18/107

Altri vincoliCHECK condizione

Assicura l'integrità di dominio tramite la limitazione dei valoriche è possibile inserire in una colonnaDEFAULT valoreIndica il valore che deve assumere l'attributo quando vieneinserita una riga nella tabella senza che sia specificato un

valore per l'attributo stesso.Se non specificato, il valore di default è NULL .IDENTITY(inizio, incremento)Indica che l'attributo è un contatore che verrà incremetatoautomaticamente ad ogni inserimento nella tabella.

Bisogna specificare il numero da cui partire e l'unità diincremento per ogni successivo inserimento - di solito,IDENTITY(1, 1).

18

Page 19: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 19/107

VisteUna vista è una tabella virtuale il cui contenuto è definito da

una query.In modo analogo a una tabella, una vista è costituita da un setdi colonne e righe di dati denominate. Tuttavia, una vista nonesiste come set archiviato di valori di dati in un database.Le righe e le colonne di dati provengono da tabelle a cui fa

riferimento la query che definisce la vista e sono prodottedinamicamente quando, in una qualunque istruzione diSELECT, INSERT, ecc., si fa riferimento alla vista stessa.

La sintassi per la creazione di una vista è la seguente:

CREATE VIEW nome_vista AS SELECT …

19

Page 20: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 20/107

Indici (1)Gli indici consentono di accedere in modo rapido a

informazioni specifiche di una tabella di database.L'indice fornisce dei puntatori ai valori dei dati memorizzati indeterminate colonne della tabella disponendoli in base alcriterio di ordinamento impostato .Come regola generale, è necessario creare un indice in una

tabella solo se vengono eseguite query frequenti sui dati dicolonne indicizzate. Gli indici occupano spazio su disco erallentano le operazioni di aggiunta, eliminazione eaggiornamento di righe.In SQL Server vengono creati automaticamente indici univoci

per imporre i requisiti di univocità dei vincoli PRIMARY KEY eUNIQUE.

La sintassi per la creazione di un indice è la seguente:CREATE [ CLUSTERD | NONCLUSTERED ] INDEX indice

ON tabella ( colonna1 [ ASC | DESC ], colonna2 [ ASC | DESC ],20

Page 21: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 21/107

Indici (2)Nella creazione degli indici è importante avere chiara la

differenza fra indici di tipo CLUSTERED e indici di tipoNONCLUSTERED:

CLUSTERED: Crea un indice in cui l'ordine logico dei valori dichiave determina l'ordine fisico delle righe corrispondenti di unatabella. Il livello inferiore, o foglia, dell'indice cluster contiene lerighe di dati effettive della tabella. È possibile creare un soloindice cluster alla volta per una tabella o una vista.

NONCLUSTERED: Crea un indice che specifica l'ordinamentologico di una tabella. Quando si utilizza un indice non cluster,

l'ordine fisico delle righe di dati è indipendente dall'ordine dellerighe indicizzato. Per ogni tabella è possibile definire al massimo999 indici non cluster, indipendentemente dal fatto che venganocreati in modo implicito tramite vincoli PRIMARY KEY e UNIQUEoppure in modo esplicito tramite CREATE INDEX.

21

Page 22: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 22/107

LINKED SERVERÈ possibile effettuare query su altri server collegati (linked

server).Esistono due modi per accedere ai dati di un linked server:usando gli identificatori:

SELECT * FROMNomeLinkedServer.NomeDb.NomeOwner.NomeTabella

oppure con la clausola OPENQUERY:

SELECT * FROM OPENQUERY (NomeLinkedServer ,'query')

in questo caso la query viene eseguita nel database remoto.

22

Page 23: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 23/107

Parte secondaSQL - DATA MANIPULATION LANGUAGE

o 2007

Page 24: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 24/107

DMLLa parte di SQL denominata Data Manipulation Language

(DML) definisce i comandi per accedere ai dati delle tabelledel database. Tali comandi permettono dunque di eseguire delle

interrogazioni (query) sulle tabelle, ma anche di inserire,modificare o cancellare i dati.

I comandi fondamentali sono: SELECT INSERT UPDATE

DELETE

Ne esistono poi altri di uso meno comune ma comodi insituazioni specifiche, ad esempio:

 TRUNCATE

24

Page 25: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 25/107

SELECT (1)Recupera righe dal database e consente la selezione di una o

più espressioni da una o più tabelle o viste.

SELECT [ ALL | DISTINCT ] [ TOP n [ PERCENT ] ] [lista espressioni | * ][ INTO nuova tabella ]FROM lista tabelle

[ WHERE condizioni semplici ][ GROUP BY lista attributi di raggruppamento 

[ HAVING condizioni aggregate ]

][ ORDER BY lista attributi di ordinamento [ ASC | DESC ] ]

Un'espressione è una combinazione di simboli e operatori chevengono valutati in modo da restituire un singolo valore. Leespressioni semplici possono essere costituite da un'unicacostante, variabile, colonna o funzione scalare. È possibile

utilizzare gli operatori per unire due o più espressioni semplici'

25

Page 26: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 26/107

SELECT (2)È possibile specificare alcune clausole che agiscono sul

numero di righe estratto dalla query:

ALLSpecifica che nel set di risultati possono essere visualizzate righeduplicate. Il valore predefinito è ALL.

DISTINCTSpecifica che nel set di risultati devono essere visualizzate solorighe univoche. I valori NULL vengono considerati valori uguali.

 TOP n [PERCENT]Specifica che dal set di risultati devono essere incluse nell'outputsolo le prime n righe.

Se si specifica PERCENT, nell'output viene incluso solo il numerodi righe corrispondente al primo n percento.

26

Page 27: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 27/107

SELECT (3) Tramite l'istruzione SELECT è possibile indicare le colonne del

set di dati che andranno a costituire il risultato della nostrainterrogazione. Tali dati possono essere di varie tipologie:

colonne delle tabelle indicate dalla clausola FROM espressioni calcolate a partire da una o più colonne

costanti risultati di funzioni…

Per ognuna delle colonne è possibile definire un alias tramitela clausola AS, ad esempio:

SELECT colonna1, --estrazione di una colonna singola

colonna2 + colonna3 AS somma, --colonna calcolatacome somma

'ciao mondo!' AS saluto, --costante (tutte le righeavranno lo stesso valore),

LTRIM(RTRIM(colonna3)) --risultato di una funzione27

Page 28: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 28/107

Operatori aritmeticiGli operatori aritmetici eseguono operazioni matematiche su

due espressioni di uno o più tipi di dati appartenenti allacategoria dei tipi di dati numerici:

+ (addizione)- (sottrazione)

* (moltiplicazione)/ (divisione)% (modulo): restituisce il resto di una divisione, ad esempio:

SELECT 23 % 5 restituisce 3

Il segno più (+) è inoltre l'operatore che consente diconcatenare più stringhe fra loro, ad esempio:

SELECT 'Ciao' + ' ' + 'Mondo!'

restituisce la stringa 'Ciao Mondo!'

28

Page 29: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 29/107

INTOSintassi:

SELECT lista attributi o espressioni INTO nuova tabella

FROM lista tabelle

Lo statement esegue l'istruzione SELECT e inserisce i datiestratti in una nuova tabella, dopo averla opportunamentecreata con la stessa formattazione dei campi estratti.

29

Page 30: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 30/107

FROMLa clausola FROM specifica la tabella, o l'insieme di tabelle, da

cui recuperare i dati, ossia definisce il set complessivo dicolonne che sarà possibile selezionare, o comunque utilizzare,nella clausola SELECT.

La clausola FROM è obbligatoria.Contiene le condizioni di join.

Esempio di estrazione da una tabella singola: SELECT lista attributi o espressioni 

FROM tabella

Esempio di estrazione da due tabelle in join: SELECT lista attributi o espressioni 

FROM tabella1

INNER JOIN tabella2 ON tabella1.colonna =

tabella2.colonna 30

Page 31: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 31/107

 JOINConsentono di mettere in relazione due o più tabelle fra loro.

Esistono varie tipologie di join che restituiscono insiemi più omeno ampi di risultati:

CROSS JOININNER JOIN

LEFT OUTER JOINRIGTH OUTER JOINFULL OUTER JOIN

31

Page 32: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 32/107

CROSS JOINConsente di ottenere il prodotto cartesiano delle tabelle

specificate nella join. Ogni riga della prima tabella vienecombinata con tutte le righe della seconda.

Esistono due sintassi alternative. Quella più corretta:

SELECT T1.*, T2.*FROM Tabella1 as T1

CROSS JOIN Tabella2 as T2

E quella più tradizionale:

SELECT T1.*, T2.*

FROM Tabella1 as T1, Tabella2 as T2

32

Page 33: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 33/107

INNER JOIN (1)È un tipo di join in cui le righe delle tabelle vengono

combinate solo se i campi collegati con join soddisfano unadeterminata condizione.

Sintassi:SELECT *

FROM Tabella1 as T1INNER JOIN Tabella2 as T2ON T1.campo = T2.campo

La condizione di join può essere di qualunque tipo, su unqualunque numero di colonne, ad esempio:

 T1.campo > T2.campo

 T1.campo BETWEEN T2.campo1 AND T2.campo2

 T1.campo <> T2.campo (equivalente a: NOT T1.campo =T2.campo)

33

Page 34: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 34/107

INNER JOIN (2)Se nella stessa istruzione sono inclusi operatori di join che

consentono di unire più coppie di colonne, le espressioni di join possono essere concatenate tramite gli operatori logiciAND e OR e gli opportuni raggruppamenti delimitati dalleparentesi tonde, ad esempio:

SELECT *FROM Tabella1 as T1

INNER JOIN Tabella2 as T2ON T1.campo = T2.campo

AND (T1.campo2 > T2.campo2 OR T1.campo3 <T2.campo3)

Anche per la INNER JOIN esiste una sintassi tradizionalealternativa:

SELECT *FROM Tabella1 as T1, Tabella2 as T2 34

Page 35: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 35/107

SELF JOINÈ possibile mettere in relazione una tabella con se stessa. In

tal caso si parla di SELF JOIN.Poiché tale tipo di query comporta l'esecuzione di un join diuna tabella con se stessa, tale tabella svolge due ruoli, chequindi devono essere distinti assegnando due alias diversinella clausola FROM. I due alias vengono utilizzati per

qualificare i nomi delle colonne nella parte rimanente dellaquery, ad esempio:

SELECT T1.*, T2.*

FROM Tabella1 AS T1

INNER JOIN Tabella1 AS T2ON T1.campo = T2.campo

35

Page 36: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 36/107

LEFT OUTER JOINPermette di relazionare due tabelle tra di loro recuperando

l'intero set di valori della tabella posta a sinistra nellarelazione. Qualora non esistano valori corrispondenti nellatabella a destra, essi verranno sostituiti con dei NULL.

Sintassi:SELECT campi FROM prima_tabellaLEFT OUTER JOIN seconda_tabellaON prima_tabella.campo = seconda_tabella.campo

36

Page 37: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 37/107

RIGHT OUTER JOINPermette di relazionare due tabelle tra di loro recuperando

l'intero set di valori della tabella posta a destra nella relazione.Qualora non esistano valori corrispondenti nella tabella asinistra, essi verranno sostituiti con dei NULL.

Sintassi:SELECT campi FROM prima_tabellaRIGHT OUTER JOIN seconda_tabellaON prima_tabella.campo = seconda_tabella.campo

37

Page 38: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 38/107

FULL OUTER JOINPermette di relazionare due tabelle tra di loro recuperando

l'intero set di valori sia della tabella posta a sinistra nellarelazione sia della tabella posta a destra. Qualora non esistanovalori corrispondenti in una delle due tabelle, essi verrannosostituiti con dei NULL.

Sintassi:SELECT *FROM Tabella1FULL OUTER JOIN Tabella2ON Tabella1.campo = Tabella2.campo

È equivalente a una LEFT OUTER JOIN in UNION con una RIGHTOUTER JOIN.

38

Page 39: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 39/107

OUTER APPLY / CROSS APPLYL'operatore APPLY consente di richiamare una funzione

valutata a livello di tabella per ogni riga restituita daun'espressione di tabella esterna di una query. La funzionevalutata a livello di tabella opera come input destro, mentrel'espressione di tabella esterna opera come input sinistro.L'input destro viene valutato per ogni riga dell'input sinistro ele righe prodotte vengono combinate per l'output finale.L'elenco di colonne prodotto dall'operatore APPLY corrispondeal set di colonne nell'input sinistro seguito dall'elenco dicolonne restituito dall'input destro. Si utilizza frequentementecon le funzioni che restituiscono una tabella, ad esempio:

SELECT T.colonna1, T.colonna2, F.risultato

FROM tabella1 TOUTER APPLY funzione(T.colonna1, T.colonna2) AS F

L'operatore CROSS APPLY restituisce solo le righe della tabellaesterna che producono un set di risultati, mentre l'operatoreOUTER APPLY restituisce sia le righe che producono un set di39

Page 40: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 40/107

 Join fra più di due tabelleOgni join consente di unire solo due tabelle. Tuttavia, dato che

le clausole FROM possono includere più definizioni di JOIN, èpossibile unire in JOIN – anche con tipologie di JOIN differenti -numerose tabelle utilizzando la stessa query. Ad esempio:

SELECT *FROM Tabella1

INNER JOIN Tabella2ON Tabella1.campo = Tabella2.campo1

LEFT OUTER JOIN Tabella3

ON Tabella2.campo2 = Tabella3.campo

40

Page 41: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 41/107

WHERE Tramite la clausola WHERE è possibile specificare le condizioni

per le righe restituite nel set dei risultati di un'istruzioneSELECT, per le righe da aggiornare in un'istruzione UPDATE equelle da cancellare in un'istruzione DELETE.Non sono previsti limiti per il numero di condizioni che èpossibile includere.

 Tali condizioni sono collegate fra loro tramite gli operatorilogici AND, OR, NOT. 

AND: Restituisce TRUE se entrambe le condizioni sono TRUEOR: Restituisce TRUE se almeno una delle due condizioni è TRUE

NOT: Inverte il valore della precedente condizione.

NOT l'operatore con precedenza massima, seguito da AND eda OR. Tramite le parentesi tonde è comunque possibileraggruppare i predicati per ottenere l'ordine di precedenza

richiesto. 41

Page 42: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 42/107

Operatori di confrontoGli operatori di confronto consentono di confrontare due

espressioni, restituendo un valore di tipo booleano: TRUE se ilconfronto è verificato, FALSE altrimenti.In T-SQL sono è possibile utilizzare i seguenti operatori diconfronto:

= uguale a<> / != diverso da> maggiore di< minore di>= maggiore o uguale a

<= minore o uguale a !< non minore di – equivalente a >= !> non maggiore di – equivalente a <=

42

Page 43: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 43/107

Operatori logici (1)Gli operatori logici verificano la veridicità di una determinata

condizione. Analogamente agli operatori di confronto, glioperatori logici restituiscono un boolean con valore TRUE oFALSE:

BETWEEN / NOT BETWEEN: Restituisce TRUE se l'operando è

compreso (non compreso) nell'intervallo specificato

IS NULL / IS NOT NULL : Restituisce TRUE se l'espressione è(non è) nulla

43

Page 44: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 44/107

Operatori logici (2)LIKE / NOT LIKE: Restituisce TRUE se l'operando corrisponde a

un modello. La sintassi è la seguente:espressione [ NOT ] LIKE pattern [ESCAPE carattere]dove pattern specifica la stringa di caratteri da cercare e puòincludere i seguenti caratteri jolly validi:

%: stringa composta da zero o più caratteri

 _: carattere singolo [x-y], [xyz]: carattere singolo compreso nell'intervallo ([x-y]) o

nel set ([xyz]) specificato [^x-y], [^xyz]: carattere singolo NON compreso nell'intervallo

([x-y]) o nel set ([xyz]) specificato

mentre con ESCAPE carattere (opzionale) è possibile indicareun carattere che, posto davanti a un carattere jolly, indica cheil carattere jolly deve essere interpretato come caratterenormale, ad esempio:

WHERE colonna LIKE '%sconto 10!%%' ESCAPE '!'

cerca tutti le righe in cui colonna contiene l'espressione“ ”

44

Page 45: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 45/107

Operatori logici (3)IN / NOT IN: Determina se il valore specificato corrisponde a

un valore in una subquery o in un elenco, ad esempio:

WHERE colonna IN (1,2,3)WHERE colonna NOT IN (SELECT colonna FROM tabella)

EXISTS / NOT EXISTS: Restituisce TRUE se una subqueryinclude una o più righe, ad esempio:

SELECT *

FROM Tabella1WHERE EXISTS(SELECT * FROM Tabella2 WHERE Tabella2.campo =Tabella1.campo)

45

Page 46: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 46/107

Operatori logici (4)ALL: restituisce TRUE se tutti i confronti specificati sono TRUE

SOME (o la clausola equivalente ANY): restituisce TRUE sealmeno uno dei confronti specificati è TRUE

Ad esempio, se abbiamo una subquery che restituisce i valori

2 e 3, avremo:

2 <= ALL (subquery ) => TRUE (2 è minore o uguale sia di 2 che di 3) 2 = ALL (subquery ) => FALSE (2 è uguale a 2 ma diverso da 3) 2 < SOME (subquery ) => TRUE (2 è almeno minore di 3)

4 < SOME (subquery ) => FALSE (4 non è minore né di 2 né di 3) 

46

e a r cerca -

Page 47: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 47/107

e a r cerca -(1)La ricerca full-text consente l'indicizzazione rapida e flessibile

per query basate su parole chiave dei dati di testo archiviati inun database di Microsoft SQL Server. A differenza delpredicato LIKE, che supporta solo i modelli di caratteri, lequery full-text eseguono ricerche linguistiche su tali dati,operando su parole e frasi in base alle regole di una linguaspecifica.L'utilizzo di tale funzionalità richiede la definizione di unanuova entità di database, il catalogo full-text, e di uno o piùindici full-text sulle tabelle sulle quali dovrà essere possibili laricerca testuale. Ogni tabella può contenere un unico indicefull-text.

A livello di query, la ricerca testuale avviene attraversol'utilizzo della clausola CONTAINS.

Senza andare nel dettaglio - la clausola permette ricerche

estremamente complesse e articolate - riportiamo alcuniesempi sul suo funzionamento ipotizzando di ricercare dei 47

e a r cerca -

Page 48: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 48/107

e a r cerca -(2)

WHERE CONTAINS(Trama, 'figlio', LANGUAGE 'italian')

identifica tutte le trame che contengono la parola "figlio"WHERE CONTAINS(Trama, ' "figl*" AND "ospedale" ', LANGUAGE'italian')

identifica tutte le trame che contengono la parola"ospedale" e delle parole che iniziano per "figl" (figlio,

figlia, ecc.)WHERE CONTAINS(Trama, ' FORMSOF(INFLECTIONAL, figlio) ',LANGUAGE 'italian')

identifica tutte le trame che abbiano una qualche formadella parola "figlio"

WHERE CONTAINS(Trama, ' FORMSOF(THESAURUS, amore) ',LANGUAGE 'italian')

identifica tutte le trame che contengano qualche parolacorrelate alla parola "amore"

WHERE CONTAINS(Trama, ' "figli*" NEAR incidente ', LANGUAGE'italian')

identifica tutte le trame che contengano una parola che48

Page 49: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 49/107

GROUP BYSpecifica i gruppi su cui calcolare un valore aggregato quando

l'elenco di selezione della clausola SELECT include funzioni diaggregazione.Quando si specifica GROUP BY, è necessario che l'elencoGROUP BY includa tutte le colonne di un'espressione non diaggregazione dell'elenco di selezione oppure che l'espressioneGROUP BY corrisponda esattamente all'espressione dell'elencodi selezione.

49

Page 50: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 50/107

HAVINGSpecifica una condizione di ricerca per un gruppo o una

funzione di aggregazione.La clausola HAVING è utilizzata in combinazione con laclausola GROUP BY.

50

Page 51: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 51/107

ORDER BY (1)Serve ad ordinare il risultato di una query in base determinati

campi : è possibile specificare il nome della colonna, il suoalias o un valore intero che rappresenta la posizione dellacolonna nell'elenco di selezione. 

SELECT Colonna1 FROM Tabella1 ORDER BY Colonna1 

SELECT Colonna1 as X FROM Tabella1 ORDER BY X  SELECT Colonna1 FROM Tabella1 ORDER BY 1

L'opzione DESC ordina i risultati in modo decrescente,ASC in modo crescente. Se non specificato, il default è ASC.

Nota bene: i valori nulli sono considerati i più piccoli inassoluto.

51

Page 52: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 52/107

ORDER BY (2)La clausola ORDER BY può includere elementi non inclusi

nell'elenco di selezioni a meno che non sia stata specificata laclausola DISTINCT, oppure nella query sia presente unoperatore di GROUP BY o di UNION.Ad esempio, è corretto scrivere:

SELECT Colonna1 FROM Tabella1 ORDER BY Colonna2 

Mentre la query seguente non è valida:SELECT Colonna1 FROM Tabella1 UNIONSELECT ColonnaA FROM Tabella

ORDER BY Colonna2

52

Page 53: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 53/107

UNION / UNION ALLCombina i risultati di due o più query in un singolo set di

risultati che include tutte le righe delle query combinate. Tutte le query devono includere lo stesso numero di colonnenello stesso ordine.I tipi di dati devono essere compatibili.Se si specifica la condizione ALL, il set di risultati comprenderà

anche le righe duplicate. Se viene omesso, esse vengonorimosse.

Sintassi:SELECT * FROM Tabella1 

UNION [ALL]SELECT * FROM Tabella1 

53

Page 54: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 54/107

INTERSECT / EXCEPTI due operatori restituiscono i valori distinti eseguendo un

confronto dei risultati di due query. Si differenziano in quanto: EXCEPT restituisce tutti i valori distinti della query a sinistradell'operando non presenti nella query a destra;

INTERSECT restituisce tutti i valori distinti restituiti da entrambele query a sinistra e a destra dell'operando.

 Tutte le query devono includere lo stesso numero di colonnenello stesso ordine.I tipi di dati devono essere compatibili.

Sintassi:

SELECT Colonna1, Colonna2 FROM Tabella1 INTERSECTSELECT ColonnaA, ColonnaB FROM Tabella1 

54

Page 55: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 55/107

Funzioni predefiniteIn T-SQL sono incluse numerose funzioni predefinite che

possono essere utilizzate per l'elaborazione di colonne eespressioni.

La sintassi per l'utilizzo delle funzioni è la seguente:

SELECT function_name ( param1, param2, …, paramN )…

Esistono sia “funzioni scalari”, che restituiscono un unicovalore, sia “funzioni di tabella” che restituiscono l'equivalentedi una tabella.

Le funzioni scalari possono a loro volta essere suddivise, aseconda del tipo dati che trattano, in funzioni di testo, funzionimatematiche e funzioni di data e ora.

Di seguito vediamo alcuni esempi delle funzioni principali perognuna di tali tipologie. 55

Page 56: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 56/107

Funzioni di testo (1)CHARINDEX ( stringa_da_cercare , testo [ ,

 posizione_da_cui_iniziare ] )Restituisce il punto iniziale dell'espressione specificata

in una stringa di caratteri, a partire eventualmente dallaposizione indicata, oppure zero se il non viene trovata

PATINDEX ( '% pattern%' , testo )

Restituisce la posizione di inizio della prima occorrenzadi un criterio di ricerca (si possono usare i caratteri jolly ),oppure zero.

REPLACE ( testo, stringa_da_cercare , stringa_di_sostituzione )

Sostituisce tutte le occorrenze di un valore stringaspecificato con un altro valore stringa.

LEFT ( testo , numero_di_caratteri ) / RIGHT ( testo ,numero_di_caratteri )

Restituisce la parte iniziale (LEFT) o finale (RIGHT) di 56

Page 57: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 57/107

Funzioni di testo (2)SUBSTRING ( testo , posizione_da_cui_iniziare ,

numero_di_caratteri )Restituisce la parte di un testo a partire dalla posizione(1 per la prima posizione) e per il numero di caratteriindicati.

LEN (testo )Restituisce il numero di caratteri dell'espressione

specificata, esclusi gli spazi vuoti finali.

LOWER (testo ) / UPPER (testo )

Convertono il testo in minuscolo (LOWER) o inmaiuscolo (UPPER)

LTRIM (testo ) / RTRIM (testo )

Rimuovono gli spazi iniziali (LTRIM) o finali da un testo57

Page 58: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 58/107

Funzioni matematiche (1)ABS ( numero )

Funzione matematica che restituisce il valore assoluto(positivo) dell'espressione numerica specificata.

ROUND ( numero , cifre_decimali )Restituisce un valore numerico arrotondato alla

lunghezza o alla precisione specificata.

FLOOR ( numero )Restituisce il valore integer maggiore che risulta

minore o uguale all'espressione numerica specificata.

CEILING ( numero )Restituisce il più piccolo valore integer maggiore o

uguale all'espressione numerica specificata.

58

Page 59: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 59/107

Funzioni matematiche (2)SIGN ( numero )

Restituisce il segno positivo (+1), zero (0) o il segnonegativo (-1) dell'espressione specificata.

SQRT ( numero )Restituisce la radice quadrata del valore specificato.

SQUARE ( numero )Restituisce il quadrato del valore specificato.

POWER ( numero , potenza )Restituisce il valore dell'espressione specificata

elevato alla potenza indicata.

59

Page 60: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 60/107

Funzioni di data e ora (1)GETDATE ()

Restituisce la data corrente.

DATEADD ( tipo , intervallo , data )Restituisce un nuovo valore basato sull'aggiunta di un

intervallo alla data specificata: parte è un parametro che

consente di specificare di il significato del parametrointervallo: year, month, day…

Ad esempio:DATEADD(month, 1, '01/01/2010') restituisce

'01/02/2010'

DATEDIFF ( tipo , data_iniziale , data_finale )Restituisce la differenza di due date secondo il tipo di

intervallo specificato: mesi, giorni, anni, ecc.

60

Page 61: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 61/107

Funzioni di data e ora (2)DATEPART (tipo , data )

Restituisce la parte della data indicata dal parametrotipo.

 YEAR ( data ) / MONTH ( data ) / DAY ( data )Restituiscono rispettivamente l'anno, il mese e il giorno

di una data. Equivalenti a DATEPART(year, data),DATEPART(month, data), DATEPART(day, data)

61

Page 62: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 62/107

ALTRE FUNZIONI (1)ISNUMERIC ( espressione )

Restituisce 1 se l'espressione è un tipo numericovalido, 0 altrimenti.

ISDATE ( espressione )Restituisce 1 se l'espressione è un tipo data valido, 0 

altrimenti.

ISNULL ( espressione , espressione_sostituto )Se espressione è NULL restituisce

espressione_sostituto, altrimenti restituisce espressione.

NULLIF ( espressione , espressione_confronto )Se espressione è uguale a espressione_confronto 

restituisce NULL, altrimenti restituisce espressione.

62

Page 63: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 63/107

Altre funzioni (2)COALESCE ( espressione_1, espressione_2 , … ,espressione_n )

Restitusce la prima espressione non nulla fra i suoiargomenti.

CAST ( espressione AS tipo_di_dato [ ( lunghezza) ] )

CONVERT ( tipo_di_dato [ ( lunghezza) ] , espressione [ ,stile ] )

Convertono il tipo di dati di espressione in un altro tipodi dati - della lunghezza indicata, per tipo che permettono dispecificarla

stile è una costante che indica il formato di input o dioutput per i tipi data e numerici. Ad esempio, 112 indicail formato aaaammgg, 110 il formato americano mm-gg-aaaa e così via.

Ad esempio: CONVERT ( varchar, GETDATE() , 101 ) restituisce la data attuale 63

Page 64: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 64/107

Funzione CASE (1)La funzione CASE valuta un elenco di condizioni e restituisceuna delle espressioni di risultato possibili.La funzione CASE ha due formati:

Semplice: esegue un confronto tra un'espressione e un set diespressioni semplici per determinare il risultato.

Avanzata: valuta un set di espressioni booleane per determinareil risultato.

Entrambi i formati supportano un argomento facoltativo ELSE.

È possibile utilizzare CASE in tutti i casi in cui è consentitaun'espressione valida, ad esempio, nelle espressioni qualiSELECT, UPDATE, DELETE e SET e nelle clausole quali IN,WHERE, ORDER BY e HAVING.

64

Page 65: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 65/107

Funzione CASE (2)Funzione CASE semplice:

CASE espressione_input WHEN espressione_when_1 THENespressione_risultato_1

WHEN espressione_when_2 THENespressione_risultato_2

… ELSE espressione_risultato_default 

END

Funzione CASE avanzata:

CASEWHEN espressione_booleana_1 THEN

espressione_risultato_1WHEN espressione_booleana_2 THEN

espressione_risultato_2

… 65

i i di i

Page 66: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 66/107

Funzioni di aggregazioneLe funzioni di aggregazione eseguono un calcolo su un set divalori e restituiscono un valore singolo. Ad eccezione dellafunzione COUNT, le funzioni di aggregazione ignorano i valoriNull. Vengono spesso utilizzate con la clausola GROUP BYdell'istruzione SELECT. Le funzioni principali sono:

COUNT( expression a ) Restituisce il numero di righe (escludendoquelle con valore NULL) di una colonna

COUNT( * ) Restituisce il numero di righe selezionate COUNT( DISTINCT expression a ) Restituisce il numero di righe

diverse selezionate AVG( expression ) Restituisce il valore medio di una colonnaMAX( expression ) Il valore massimo in una colonnaMIN( expression ) Il valore minimo SUM( expression ) La somma dei valori di una colonna

66

COUNT / COUNT BIG

Page 67: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 67/107

COUNT / COUNT_BIGCOUNT ( * | [ ALL | DISTINCT ] expression )

Restituisce il numero di elementi in un gruppo. Ilfunzionamento di COUNT_BIG è analogo a quello dellafunzione COUNT. L'unica differenza è il valore restituito.COUNT_BIG infatti restituisce sempre un valore di tipo bigint

mentre COUNT restituisce sempre un valore di tipo int. Puòprecedere la clausola OVER.

* Conta le righe restituite dalla query ALL Applica la funzione di aggregazione a tutti i valori. È il

valore predefinito.DISTINCT Indica che la funzione AVG deve essere eseguita soloin ogni istanza univoca di un valore,indipendentemente dal numero di occorrenze delvalore.

expression Colonna o espressione sulla quale deve essere

eseguito il conteggio. 67

AVG

Page 68: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 68/107

AVGAVG ( [ ALL | DISTINCT ] expression )

Restituisce la media dei valori di un gruppo. I valori Nullvengono ignorati. Può precedere la clausola OVER.

ALL Applica la funzione di aggregazione a tutti i valori.

DISTINCT Indica che la funzione AVG deve essere eseguita soloin ogni istanza univoca di un valore, indipendentemente dalnumero di occorrenze del valore.

expression Colonna o espressione sulla quale deve essereeseguito il calcolo.

68

MIN / MAX

Page 69: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 69/107

MIN / MAXMIN (expression) / MAX (expression)

 Restituiscono rispettivamente il valore minimo e il valoremassimo dell'espressione. Può precedere la clausola OVER.

expression Colonna o espressione sulla quale deve essere

eseguito il calcolo.

Le funzioni MIN e MAX ignorano i valori Null.Con colonne di dati di tipo carattere, MIN e MAX consentono diindividuare il valore minore o, rispettivamente maggiore,

rispetto alla sequenza di confronto.

69

SUM

Page 70: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 70/107

SUMSUM ( [ ALL | DISTINCT ] expression )

Restituisce la somma di tutti i valori o solo dei valori DISTINCTdell'espressione. La funzione SUM può essere utilizzata solocon colonne numeriche. I valori Null vengono ignorati. Puòprecedere la clausola OVER.

ALL Applica la funzione di aggregazione a tutti i valori. È ilvalore predefinito.

DISTINCT Indica che la funzione SUM deve essere eseguita soloin ogni istanza univoca di un valore,indipendentemente dal numero di occorrenze delvalore.

expression Colonna o espressione sulla quale deve essereeseguito il calcolo.

70

Cl l OVER

Page 71: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 71/107

Clausola OVERaggregate functions OVER (PARTITION BY expression)

ranking functions OVER ( [ PARTITION BY expression, ] ORDERBY expression )

La clausola OVER determina il partizionamento e

l'ordinamento del set di righe prima dell'applicazione della“funzione finestra” associata. Con funzione finestra si intendeuna funzione che lavora su un set di righe definite, dettofinestra, e calcola un valore per ognuna di tali righe. Neesistono due tipologie: funzioni di aggregazione (le stesse che

si usano con la clausola GROUP BY) e funzioni di rango.

PARTITION BY Suddivide il set di risultati in partizioni. La funzionefinestra viene applicata a ogni singola partizione e il calcolo vieneriavviato per ogni partizione.

ORDER BY Specifica l'ordine di applicazione della funzionefinestra di ran o.71

F i i di

Page 72: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 72/107

Funzioni di rangoLe funzioni di rango restituiscono un valore di rango, adesempio il numero di riga, per ogni riga di una partizione. Inbase alla funzione utilizzata, è possibile che venga assegnatolo stesso valore a più righe.

ROW_NUMBER() OVER (PARTITION BY expression, ORDER BYexpression) Restituisce il numero sequenziale di una rigaall'interno di una partizione di un set di risultati, a partire da 1per la prima riga di ogni partizione.

RANK() OVER (PARTITION BY expression, ORDER BY expression)Restituisce il rango di ogni riga all'interno della partizione di unset di risultati.

DENSE_RANK() OVER (PARTITION BY expression, ORDER BYexpression)

Restituisce il rango delle righe nella partizione di un set deirisultati, senza gap nell'assegnazione dei ranghi.

NTILE(number ) OVER (PARTITION BY expression, ORDER BY

expression) 72

INSERT (1)

Page 73: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 73/107

INSERT (1)Ha la funzione di inserire i dati nelle tabelle.

Le colonne di destinazione dei valori possono essere o menodichiarate nel comando. Se non vengono dichiarate, ènecessario passare al comando un valore per ogni colonnadella tabella, rispettando rigorosamente l'ordine delle colonne

stesse.Se, invece, le colonne di destinazione vengono dichiarate, èpossibile indicare le sole colonne per le quali vengono passatidei valori, purché vengano inseriti comunque i valori per tuttele colonne NOT NULL (che non possono essere nulle) dellatabella.

73

INSERT (2)

Page 74: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 74/107

INSERT (2)Sintassi semplice:

INSERT INTO nome_tabella [ (elenco_campi ) ]VALUES

('elenco_valori')Sintassi con query:

INSERT INTO nome_tabella [ (elenco_campi ) ]

SELECT ...FROM …

74

UPDATE

Page 75: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 75/107

UPDATEHa la funzione di modificare i dati contenuti in una tabella.

Il nome di ogni campo che deve essere modificato vadichiarato dopo la parola chiave SET.Sintassi:

UPDATE nome_tabella SET nome_campo = 'valore'

WHERESpecifica le condizioni che limitano le righe da aggiornare. Seviene omesso aggiorna tutte le righe della tabella.FROMSpecifica che una tabella, vista o origine di tabella derivataviene utilizzata per fornire i criteri per l'operazione diaggiornamento

75

DELETE

Page 76: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 76/107

DELETEHa la funzione di cancellare i dati dalle tabelle.

Sintassi:DELETE [ FROM ] nome_tabella

WHERE condizione

Se la clausola WHERE viene omessa, l'istruzione DELETE

elimina tutte le righe della tabella.

76

TRUNCATE

Page 77: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 77/107

 TRUNCATERimuove tutte le righe da una tabella, ma non rimuove lastruttura della tabella e le relative colonne, i vincoli, gli indici ecosì via.

Dal punto di vista funzionale TRUNCATE TABLE equivaleall'istruzione DELETE senza clausola WHERE.

È più rapida e utilizza un numero minore di risorse di sistemae del log delle transazioni rispetto alla DELETE.

Sintassi: TRUNCATE TABLE nome_tabella

77

Page 78: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 78/107

Parte terza TRANSACT-SQL

o 2007

Introduzione

Page 79: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 79/107

Introduzione Transact-SQL (abbreviato in T-SQL) è l’estensione proprietaria

di Microsoft per avere a disposizione un linguaggio diprogrammazione completo per la gestione dei propri databaseSqlServer.È un linguaggio che integra le clausole specifiche dell’SQL conle clausole necessarie a qualsiasi linguaggio diprogrammazione, ossia, per fare qualche esempio:

definizione di variabili; istruzioni di controllo del flusso; gestione degli errori.

79

Utilizzi del Transact SQL

Page 80: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 80/107

Utilizzi del Transact-SQLIl linguaggio Transact-SQL è utilizzato per la definizione ditutte le entità procedurali necessarie al correttofunzionamento di un database, in particolare:

STORED PROCEDURE: programmi che possonoaccettare dei parametri ed eseguono una serie diistruzioni; non restituiscono nulla;

FUNCTION: programmi che possono accettare deiparametri e restituiscono un risultato, di tipo scalare(numero, testo, ecc.) o tabellare;

TRIGGER: particolari programmi legati direttamente alletabelle che si attivano in automatico al verificarsi dideterminate condizioni, ad esempio l’aggiornamento o lacancellazione di una riga.

80

Commenti

Page 81: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 81/107

CommentiIn T-SQL, come in qualsiasi linguaggio di programmazione, laprima regola di sintassi da imparare – e di solito, anche laprima che si dimentica di applicare… - è la scrittura deicommenti.In T-SQL ne esistono di due tipi:

-- questo è un commento su una riga singola

 /*questo è un commento su più righe*/ 

81

Variabili

Page 82: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 82/107

VariabiliPer dichiarare una variabile la sintassi è la seguente:

DECLARE @nome_variabile tipo_dato il suo valore iniziale viene impostato a NULL. Il nome dellavariabile deve obbligatoriamente iniziare con il caratterechiocciola @.

Esistono due modi per valorizzare la variabile dichiarata.Quando si tratta di una semplice assegnazione si usa lasintassi:

SET @nome_variabile = espressione 

nel caso in cui invece il valore da assegnare deriva daun'interrogazione, la sintassi è la seguente:

SELECT @nome_variabile = espressione FROM …

Con questa seconda sintassi è possibile assegnare 82

Istruzioni per il controllo dei flussi

Page 83: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 83/107

Istruzioni per il controllo dei flussiIl linguaggio T-SQL, come tutti gli altri linguaggi diprogrammazione, fornisce alcune parole chiave per specificarel'ordine e/o le condizioni che determinano l'esecuzione di unframmento di codice. In particolare, le istruzioni piùsignificative sono le seguenti:

BEGIN … END IF … ELSE WHILE (BREAK, CONTINUE) GOTO RETURN

 TRY… CATCH

83

BEGIN END

Page 84: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 84/107

BEGIN… END Tramite la clausola BEGIN… END è possibile specificare un

blocco di istruzioni che devono essere eseguite una di seguitoall'altra.I blocchi BEGIN… END possono essere nidificati fra loro. Lasintassi è la seguente:

BEGINblocco di istruzioni

END

Ad esempio:

BEGINSET @varibile = 'ciao mondo!'PRINT @varibile

END

84

IF ELSE (1)

Page 85: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 85/107

IF… ELSE (1)Se si vuole che un'azione venga eseguita se una condizione èvera, ed un'altra se la condizione è falsa, occorre utilizzarel'istruzione IF.Il blocco di istruzioni dopo ELSE saranno eseguite qualora lacondizione dovesse risultare falsa.L' ELSE non è obbligatorio.È possibile nidificare condizioni IF dopo un'altra condizione IF ouna parola chiave ELSE.Nel caso di un blocco di istruzioni, è necessario racchiuderletra le parole chiave BEGIN e END

85

IF ELSE (2)

Page 86: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 86/107

IF… ELSE (2)Sintassi:

IF condizione istruzione

ELSEistruzione

Oppure:

IF espressioneBEGIN

istruzione

istruzione

…END

ELSEBEGIN

istruzioni

END 86

WHILE (1)

Page 87: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 87/107

WHILE (1) Tramite la clausola WHILE una serie di istruzioni vengono eseguiteripetutamente per tutto il tempo in cui la condizione specificata

risulta vera. È possibile controllare l'esecuzione di istruzioni nelciclo WHILE dall'interno del ciclo tramite le parole chiave BREAK eCONTINUE, generalmente tramite un'istruzione IF… ELSE.

Sintassi:WHILE condizione 

BEGINblocco di istruzioniIF condizione 

[BREAK | CONTINUE]blocco di istruzioni

END

BREAK consente di uscire dal ciclo WHILE più interno. Vengonoeseguite le istruzioni che si trovano dopo la parola chiave END, chesegna la fine del ciclo.

CONTINUE consente il riavvio del ciclo WHILE, ignorando tutte leistruzioni che seguono.

87

WHILE (2)

Page 88: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 88/107

WHILE (2)Ad esempio, il seguente blocco di codice utilizza un bloccoWHILE per scrivere i numeri da 1 a 10:

DECLARE @valore intSET @valore = 1

WHILE @valore <= 10BEGIN

PRINT @valore

SET @valore = @valore + 1

END

88

Cursori (1)

Page 89: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 89/107

Cursori (1)Nei database relazionali le operazioni vengono eseguite su setdi righe completi. Le applicazioni non sono sempre in grado digestire in modo efficiente un intero set di risultati comesingola unità. In tali casi deve essere pertanto disponibile unmeccanismo per l'elaborazione di una riga singola o di unblocco di righe di dimensioni ridotte. I cursori sonoun'estensione dei set di risultati che implementano appunto

tale meccanismo.I cursori estendono l'elaborazione dei risultati nel modoseguente:

Consentono il posizionamento su righe specifiche del set dirisultati.

Recuperano una riga o un blocco di righe dalla posizione correntedel set di risultati.

Supportano la modifica dei dati delle righe in corrispondenzadella posizione corrente del set di risultati.

In SqlServer è possibile utilizzare vari tipi di cursori, che si 89

Cursori (2)

Page 90: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 90/107

Cursori (2)L'utilizzo di un cursore richiede generalmente le seguentiistruzioni:

dichiarazione : DECLARE apertura: OPEN l'assegnazione dei campi a varibili: FETCH

l'elaborazione delle righe tramite un ciclo WHILE chiusura: CLOSE rimozione dei riferimenti al cursore: DEALLOCATE

Vediamo di seguito un esempio completo relativo a un cursore

che lavora ciclicamente su 2 colonne di un set di righe eutilizza le informazioni per scrivere dei messaggi.

90

Cursori (3)

Page 91: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 91/107

Cursori (3)DECLARE

@Nome varchar(10),@ Anno int

DECLARE cur_persone CURSORFOR SELECT Nome, Anno FROM dbo.Persone

OPEN cur_persone FETCH NEXT FROM cur_persone INTO @ Nome, @ Anno

WHILE @@FETCH_STATUS = 0 BEGINPRINT(@Nome + ' ha ' + cast(2011 - @ Anno as

varchar) + ' anni')FETCH NEXT FROM cur_persone INTO @Nome, @ Anno

ENDCLOSE cur_persone DEALLOCATE cur_persone 

91

Gestione degli errori: TRY CATCH (1)

Page 92: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 92/107

Gestione degli errori: TRY... CATCH (1)Gli errori nel codice T-SQL possono essere elaborati utilizzandoun costrutto TRY … CATCH in modo simile a quanto avvienenella maggior parte dei linguaggi di programmazione moderni.

 Tale costrutto è costituito da due parti: un blocco TRY e unblocco CATCH. Quando viene rilevata una condizione di errorein un'istruzione contenuta in un blocco TRY, il controllo vienepassato a un blocco CATCH, dove può essere eseguital'elaborazione dell'errore. Quindi le istruzioni successiveall'istruzione che ha generato l'errore non verranno eseguite.

Dopo la gestione dell'eccezione da parte del blocco CATCH, ilcontrollo viene trasferito alla prima istruzione successivaall'istruzione END CATCH.

Se nel blocco TRY non sono presenti errori, il controllo passa

all'istruzione immediatamente successiva all'istruzione END 92

Gestione degli errori: TRY CATCH (2)

Page 93: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 93/107

Gestione degli errori: TRY... CATCH (2)Un blocco TRY inizia con l'istruzione BEGIN TRY e termina conl'istruzione END TRY. Tale blocco deve essereimmediatamente seguito da un blocco CATCH. Un bloccoCATCH inizia con l'istruzione BEGIN CATCH e termina conl'istruzione END CATCH. In T-SQL ogni blocco TRY è associato aun solo blocco CATCH. Di seguito riportiamo la sintassi baseper l'utilizzo di un blocco TYR … CATCH:

BEGIN TRY… istruzione

… istruzione

… SELECT 1/0 -- istruzione che genera un errore di divisione

 per zero

… istruzione

END TRYBEGIN CATCH

… gestione dell'errore

END CATCH 93

Gestione degli errori: TRY CATCH (3)

Page 94: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 94/107

Gestione degli errori: TRY... CATCH (3)All'interno del blocco CATCH è possibile recuperareinformazioni sull'eccezione verificatasi tramite alcune funzionidi errore predefinite:

ERROR_NUMBER() restituisce il numero di errore. ERROR_MESSAGE() restituisce il testo completo del messaggio

di errore. Il testo include i valori specificati per eventuali

parametri sostituibili, ad esempio lunghezze, nomi di oggetti oorari.

ERROR_SEVERITY() restituisce la gravità dell'errore. ERROR_LINE() restituisce il numero di riga nella routine che ha

causato l'errore.

ERROR_PROCEDURE() restituisce il nome della stored procedureo del trigger in cui si è verificato l'errore.

94

Gestione degli errori: @@ERROR

Page 95: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 95/107

Gestione degli errori: @@ERRORNelle versioni precedenti di Sql Server la gestione degli erroriavveniva tramite l'utilizzo della variabile di sistema

@@ERROR. Tale variabile restituisce 0 se l'ultima istruzione T-SQL è stata eseguita correttamente, oppure un numero dierrore se l'istruzione ha generato un errore. Per conoscere ilsignificato dell'errore è necessario interrogare la vista disistema sys.messages.

Il valore di @@ERROR cambia ogni volta che un'istruzione T-SQL viene completata. La funzione @@ERROR deve esserepertanto elaborata in uno dei due modi seguenti:

 Testare o utilizzare @@ERROR subito dopo l'istruzione T-SQL. Salvare @@ERROR in una variabile di tipo integer subito dopo il

completamento dell'istruzione. Il valore della variabile potràessere utilizzato in un secondo momento.

Un'altra variabile di sistema che può rivelarsi utile per lagestione di situazioni non previste è @@ROWCOUNT cherestituisce il numero di righe lette o elaborate dall'istruzione

precedente e permette quindi di fare delle verifiche sul buon95

Transazioni

Page 96: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 96/107

 TransazioniCon il termine transazione si intende una singola unità dilavoro - generalmente costituita da una o più operazioni di

inserimento, modifica o cancellazione - che deve essereeseguita interamente. Se tutte le operazioni vanno a buonfine, le modifiche ai dati vengono rese persistenti, ossia vieneeffettuato il commit della transazione. Se, al contrario, siverificano errori viene effettuato il rollback e quindi tutte le

modifiche ai dati andranno perse.

SQL Server supporta le modalità per le transazioni seguenti. Transazioni con autocommit : ogni istruzione corrisponde a una

transazione. È l'impostazione di default. Transazioni esplicite: ogni transazione viene avviata in modo

esplicito tramite l'istruzione BEGIN TRANSACTION e terminatacon un'istruzione esplicita COMMIT o ROLLBACK.

Transazioni implicite: una nuova transazione viene avviata inmodo implicito al termine di una transazione precedente, ma

tutte le transazioni vengono terminate in modo esplicito con'96

Transazioni esplicite

Page 97: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 97/107

 Transazioni esplicitePer transazione esplicita si intende una transazione di cuivengono definiti in modo esplicito l'inizio e la fine. Per definire

tali transazioni vengono utilizzate le istruzioni BEGIN TRANSACTION, COMMIT TRANSACTION, ROLLBACK  TRANSACTION.

BEGIN TRANSACTION: Contrassegna il punto iniziale di una

transazione esplicita per una connessione. COMMIT TRANSACTION: Consente di completare una transazione

se non si sono verificati errori. Tutte le modifiche dei datieseguite nella transazione vengono integrate in modopermanente nel database e le risorse utilizzate dalla transazione

vengono liberate. ROLLBACK TRANSACTION: Consente di annullare una transazionein cui si sono verificati errori. Per tutti i dati modificati dallatransazione viene ripristinato lo stato precedente l'inizio dellatransazione e le risorse utilizzate dalla transazione vengonoliberate.

97

Gestione errori nelle TRANSAZIONI

Page 98: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 98/107

Gestione errori nelle TRANSAZIONIDi seguito vediamo un esempio di gestione degli erroriall'interno di una transazione attraverso l'utilizzo di un blocco

 TRY … CATCH:

SET XACT_ABORT ONBEGIN TRY

BEGIN TRANSACTION

… istruzione… istruzione

WHILE XACT_STATE() = 1BEGIN

COMMIT TRANSACTIONEND

END TRYBEGIN CATCH

… test su ERROR_NUMBER(), ERROR_MESSAGE()

WHILE XACT_STATE() <> 0BEGIN

ROLLBACK TRANSACTIONEND

END CATCH 98

TRANSACTION ISOLATION LEVEL

Page 99: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 99/107

 TRANSACTION ISOLATION LEVELIn SqlServer 2005 è possibile indicare quale debba essere ilcomportamento delle query che cercano di accedere a delle

tabelle che risultano in fase di aggiornamento da parte di unao più transazioni.La sintassi è la seguente:

SET TRANSACTION ISOLATION LEVEL impostazione

dove il parametro impostazione può valere:

READ UNCOMMITTED Specifica che le istruzioni possono leggere le righe modificate da

altre transazioni ma di cui non è ancora stato eseguito il commit.

READ COMMITTED Specifica che le istruzioni possono leggere le righe modificate da

altre transazioni soltanto quando sia stato eseguito il commit.

Questa è l'opzione predefinita in SQL Server. 99

Tabelle temporanee

Page 100: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 100/107

 Tabelle temporaneeNel caso si debbano eseguire operazioni complesse cherichiedono più passaggi, risulta molto comodo utilizzare le

tabelle temporanee. Tali tabelle - il cui nome deve iniziare con il simbolo

cancelletto # - non esistono fisicamente sul database sulquale stiamo lavorando, ma risultano disponibile, dopo la lorocreazione, soltanto durante il ciclo di vita della connessione

che le ha create su un apposito database temporaneo.Dalle altre connessioni risulterà non solo non disponibile lastessa tabella denominata "#tmpTable" ma sarà addiritturapossibile crearne un'altra con lo stesso nome. Sarà compitodel motore mantenere nettamente separate e distinte le due

tabelle tra le diverse connessioni.

I modi per crearle sono essenzialmente: con i normali comandi T-SQL di tipo DDL, ad esempio CREATE TABLE #tabella_temporanea; con il comando SELECT...INTO #tabella temporanea; 100

STORED PROCEDURE (1)

Page 101: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 101/107

STORED PROCEDURE (1)È un programma scritto in T-SQL che può accettare deiparametri ed esegue una serie di operazioni, generalmente di

tipo DML ma non solo. Non restituisce nulla (anche se puòmodificare il valore dei parametri per i quali sia statoimpostato il modificatore OUTPUT).

Per crearla:CREATE PROCEDURE nome_procedura AS

Per modificarla:ALTER PROCEDURE nome_procedura AS

Per eliminarla

DROP PROCEDURE nome_proceduraPer eseguirla:

EXEC nome_procedura

101

STORED PROCEDURE (2)

Page 102: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 102/107

STORED PROCEDURE (2)Vediamo un esempio di dichiarazione di una procedura chenon accetta parametri:

CREATE PROCEDURE nome_procedura AS

codice T-SQL

E di una procedura che accetta due parametri in input:CREATE PROCEDURE nome_procedura 

@param1 nvarchar(50),@param2 nvarchar(50) OUTPUT

AS codice T-SQL

Il modificatore OUTPUT sul secondo parametro permette allaprocedura di modificarne il valore. Tale valore modificatorisulterà quindi visibile nel blocco di codice da cui è stata

chiamata la procedura. 102

FUNCTION (1)

Page 103: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 103/107

FUNCTION (1)Le funzioni sono delle routine T-SQL che restituiscono unvalore.

Non è possibile utilizzare funzioni definite dall'utente pereseguire azioni che modificano lo stato del database. In modoanalogo alle funzioni di sistema, le funzioni definite dall'utentepossono essere richiamate da una query.

Per crearla:CREATE FUNCTION nome_funzione …

Per modificarla:ALTER FUNCTION nome_funzione …

Per eliminarlaDROP FUNCTION nome_funzione 

Per eseguirla:SELECT nome_procedura(param1, … , paramN)

103

FUNCTION (2)

Page 104: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 104/107

FUNCTION (2)Vediamo un esempio di dichiarazione di una procedura :CREATE FUNCTION nome_funzione ( 

@param1 int,@ param2 varchar(5)

 ) RETURNS tipo_dato [(lunghezza )]

ASBEGIN

codice T-SQL

RETURN valore

END

104

 TRIGGER (1)

Page 105: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 105/107

GG ( )Un trigger è un tipo speciale di stored procedure, definita suuna specifica tabella o vista, che viene eseguita

automaticamente quando si verifica un evento nel server didatabase. Esistono sia trigger DML che trigger DDL.I trigger DML possono essere attivati da un o più eventispecifici di INSERT, UPDATE o DELETE e possono essere duetipi:.

AFTER: il trigger viene attivato solo al termine dell'esecuzione ditutte le operazioni specificate nell'istruzione che lo ha attivato.Affinché il trigger venga attivato, è inoltre necessario che sianostati completati tutti i controlli dei vincoli e le operazioni

referenziali di propagazione. INSTEAD OF: il trigger viene eseguito al posto dell'istruzione che

lo ha attivato, che quindi non verranno eseguite.

105

 TRIGGER (2)

Page 106: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 106/107

( )Vediamo un semplice esempio di difinizione di un trigger DMLche viene attivato DOPO l’esecuzione su una tabella di

un’operazione di INSERT o di UPDATE:

CREATE TRIGGER nome_trigger 

ON tabella

AFTER INSERT, UPDATEAScodice T-SQL

106

Riferimento

Page 107: Corso Sql

5/16/2018 Corso Sql - slidepdf.com

http://slidepdf.com/reader/full/corso-sql 107/107

Per avere i riferimenti dettagliati di tutte le istruzioni e lefunzioni a cui si fatto riferimento in queste slide, si consiglia di

consultare la sezione del sito MSDN di Microsoft relativa allinguaggio Transact-SQL, all’indirizzo:

http://msdn.microsoft.com/it-it/library/ms189826%28v=sql.90%29.aspx