corso sql
DESCRIPTION
corso elementare sul linguaggio sql di sql server di microsoftTRANSCRIPT
![Page 1: Corso Sql](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/1.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/2.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/3.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/4.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/5.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/6.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/7.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/8.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/9.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/10.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/11.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/12.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/13.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/14.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/15.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/16.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/17.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/18.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/20.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/21.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/22.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/23.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/24.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/25.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/26.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/27.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/28.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/29.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/30.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/31.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/32.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/33.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/34.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/35.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/36.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/37.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/38.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/39.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/40.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/41.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/42.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/43.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/44.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/45.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/46.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/47.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/48.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/49.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/50.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/51.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/52.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/53.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/54.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/55.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/56.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/57.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/58.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/59.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/60.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/61.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/62.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/63.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/64.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/65.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/66.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/67.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/68.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/69.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/70.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/71.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/72.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/73.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/74.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/75.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/76.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/77.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/78.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/79.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/80.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/81.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/82.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/83.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/84.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/85.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/86.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/87.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/88.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/89.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/90.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/91.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/92.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/93.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/94.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/95.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/96.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/97.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/98.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/99.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/100.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/101.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/102.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/103.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/104.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/105.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/106.jpg)
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](https://reader031.vdocuments.mx/reader031/viewer/2022020803/5572007b49795991699f810d/html5/thumbnails/107.jpg)
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