Sei sulla pagina 1di 25

1)

Panoramica Introduttiva

Nella prima parte abbiamo trattato SQL Server dal punto di vista esclusivamente Amministrativo
Abbiamo parlato dellarchitettura di SQL Server, dei principi legati allinstallazione, di creazione di Database, di regole per
lutilizzo corretto della sicurezza, di funzionamento Teorico del Transaction Log, di Backup e di Restore, etc
Tutte attivit molto importanti che svolge normalmente il DBA (Database Administrator) di unazienda
Come abbiamo visto, per svolgere queste attivit si fa spesso utilizzo di strumenti grafici
Esiste infatti uno strumento molto interessante, totalmente grafico e molto intuitivo chiamato Enterprise Manager, dal quale
si possono gestire con facilit quasi tutte le principali attivit amministrative svolte da SQL Server
Nella versione 2000 di SQL Server molte delle attivit precedentemente elencate si possono svolgere anche ricorrendo
allaiuto di strumenti di autocomposizionestrumenti che facilitano moltissimo le attivit Gestionali allinterno di SQL Server
Tutte le attivit che si svolgono normalmente ricorrendo ad Enterprise Manager si possono svolgere anche da Riga di
Comando
SQL Server dispone infatti di un sofisticatissimo Linguaggio Transazionale chiamato TRANSACT SQL Standard ANSI 92
utilizzato sia per effettuare delle normalissime interrogazioni a Database, sia per effettuare attivit di manutenzione
amministrativa e per programmare delle sofisticate procedure di Gestione ed Elaborazione di dati
In questa seconda parte del corso vogliamo concentrarci prevalentemente sullutilizzo di questo linguaggio transazionale e su
come poterlo utilizzare avvalendoci dellaiuto di Access XP
Access infatti fornisce degli strumenti potentissimi di Queryng dai quali possibile visualizzare la struttura sintattica del
linguaggio SQL che, una volta copiata, facilmente trasportabile allinterno di SQL Query Analyzer, eseguirla e provarvi ad
effettuare delle modifiche per capire i meccanismi di questo linguaggio
Quindi proveremo proprio a partire da quiossia dalla scritture di semplici comandi Transact SQL partendo da semplici query
Access XP per copiare poi il risultato allinterno di SQL Server e verificarne il funzionamento

I nostri Strumenti di Lavoro Query Analyzer

Partiamo con lanalizzare gli strumenti di lavoro che ci serviranno per iniziare a scrivere i nostri primi comandi con il
linguaggio Transazionale Transact SQL
Partendo da SQL Server vediamo di analizzare lo strumento che utilizzeremo principalmente per scrivere i nostri comandi
SQL Server dispone infatti di un potentissimo strumento Client chiamato Query Analyzer
Una volta caricato questo strumento richiede di effettuare la connessione a SQL Server visualizzando la modalit di
autenticazione (Integrata o Mista) della quale dispone SQL ServerIn questa maschera si deve inserire: Il nome del Server
(lasciando vuoto, inserendo il punto o digitando Local tra parentesi tondesi specifica il Server di Default) e le credenziali di
accesso (ovviamente se specifichiamo Use Windows NT Authenticationfacciamo riferimento al logon gi effettuato al
Dominio Windows 2000)
Effettuata la connessione possiamo notare nella barra del titolo le informazioni relative alla connessione: Server di
Connessione, Database aperto e utente connessosi possono aprire fino a 32 connessioni Query Analyzer contemporanee!
Oltre alla finestra nella quale scrivere fisicamente le Query presente unaltra finestra sulla sinistra definita Object Browser
che contiene lelenco di tutti gli oggetti presenti e disponibili allinterno di SQL Server
Nella barra degli strumenti ci sono una serie di pulsanti che consentono di: Eseguire le Query, cambiare modalit di
visualizzazione, cambiare database attivo, salvare ed aprire query, effettuare delle ricerche sul contenuto del testo, etc.
Quando si scrivono i comandi Transact SQL allinterno di Query Analyzer il testo assume colori differenti a seconda del
comando Transact SQL che si sta digitando: Rosso per una stringa di caratteri, Rosso Scuro per Stored Procedure, Verde per
tabelle di sistema, Verde Scuro per commenti al codice, Magenta indica che si tratta di funzioni di sistema, Blu sono invece
parole chiave, e Grigio sono invece Operatori vari (matematici, logici, etc.)
Una volta digitato il comando Transact SQL per eseguirlo si pu premere il pulsante Execute Query sulla barra dei comandi
oppure premere il tasto funzione F5.

SQL Server esegue in maniera sequenziale tutto il contenuto che si trova allinterno della finestra d Queryper eseguire solo
una parte di comando basta evidenziare la porzione di comando interessata e premere il tasto funzione F5
Strumenti di Lavoro Query Analyzer

Il risultato della nostra query pu essere visualizzato in diverse modalit a seconda dellesigenza specifica
Allinterno del Menu Query possibile scegliere di visualizzare in maniera differente i dati della query selezionando diverse
voci di menu: Results in Text, che visualizza il contenuto in un formato testo semplice, Results in Grid, che visualizza il
contenuto della query allinterno di una griglia tipo Excel e Results to File, dove il contenuto della query genera un file di
tipo Report (.RPT)
Oltre alla possibilit di visualizzare in diversi formati i records della query esiste la possibilit, sempre in fase di esecuzione, di
non ottenere dati ma informazioni di sistema, grazie a tre diverse modalit che sono rispettivamente: Show Execution Plain,
Show Server Trace, e Show Client Statistics
La prima modalit di visualizzazione (Show Execution Plain) consente di rappresentare graficamente lesecuzione delle attivit
che vengono eseguite allinterno di una query. Si tratta in fondo di unapplicazione grafica molto interessante finalizzata quasi
esclusivamente alla comprensione delle caratteristiche relative alle prestazioni di una queryE quindi in grado anche di
restituire dei consigli su come poter ottimizzare maggiormente le nostre query facendo utilizzo ad esempio di particolari indici
su particolari colonnefacendo quindi delle simulazioni e delle prove comparative tra query molto simili possibile stabilire il
piano di esecuzione pi appropriato per quel tipo di attivit
La modalit Show Server Trace consente di visualizzare limpegno del server nelleseguire una determinata procedure
Transact SQL possibile infatti visualizzare la durata complessiva delloperazione, limpegno complessivo della CPU, le
attivit di lettura e quelle di scrittura ed il tipo di classe di evento generato
La modalit Show Client Statistics permette invece di analizzare tutte le richieste effettuate dal client allinterno del motore
di SQL Serverle richieste che in grado di monitorare questo strumento di visualizzazione sono moltissime: Numero di

Istruzioni e righe interessate alle operazioni di tipo INSERT, UPDATE e DELETE, numero di transazioni effettuate, numero di
istruzioni SELECT che sono state elaborate, numero di cicli di andata e di ritorno dal Server, numero di pacchetti inviati e
ricevuti, etc..
Esempi di Templates Transact SQL

Query Analyzer di SQL Server sicuramente lo strumento pi complesso per scrivere Query poich non ci sono molti aiuti
durante la scrittura della sintassi di una query
Infatti, beneficiando di alcuni meccanismi della versione 2000 di SQL Query Analyzer, possiamo trovarci gi scritte dal
sistema delle ricchissime porzioni di codice che possiamo poi successivamente modificare ed adattarci alle nostre esigenze
Infatti con questi utilissimi Template possiamo ritrovarci gi compilate sintassi di complicatissimi costrutti quali: Viste,
Funzioni, Stored Procedure, ecc..
Siamo comunque sempre costretti a conoscere perfettamente la sintassi dei comandi ed i meccanismi che si trovano dietro ai
costrutti di una procedura o ad esempio di una funzionein Query Analyzer o si conosce la sintassi oppure risulta
praticamente impossibile scrivere comandi utilizzando il linguaggio Transazionale Transact SQL
Uno dei sistemi pi immediati per imparare il linguaggio Transact SQL sicuramente quello di creare delle semplici query con
Access e visualizzarne la sintassi SQL
Access infatti dispone di un potentissimo sistema di interrogazione chiamato Query by Example che permette di definire la
struttura di una query in maniera totalmente grafica ed avere come risusltato finale la compilazione gratuita del codice SQL
Creare delle query con Access sicuramente molto semplicepossiamo ricorrere ai soliti strumenti di Autocomposizione
oppure ricorrere alla costruzione manuale del comandopossiamo inserire operatori logici (AND, OR, NOT), operatori di
confronto, raggruppamenti con calcoli statistici, ecc.
Ovviamente tutte queste prove sono finalizzate, in questo corso, esclusivamente a carpire i segreti della sintassi del comando
SQL che viene generata in automatico a fine esecuzione della query stessa

Questa query pu essere semplicemente copiata ed incollata allinterno di SQL Query Analyzer per verificarne il
funzionamentoe magari utilizzata come modello per le query successive
Access vs SQL Server

In questo modulo cercheremo di effettuare la prova descritta nel modulo precedente ossia creare una query con Access XP,
trasformarla in codice SQL ed inserire il codice copiato allinterno di SQL Query Analyzer
Quindi proveremo insieme ad aprire Access XP, aprire il Database NorthWind (utilizzeremo questo database poich ne esiste
una copia gemella in SQL Server), creare una semplice query, trasformare il codice in linguaggio SQL ed infine a copiare
questo codice allinterno del nostro SQL Query Analizer per vederne gli effetti
Iniziamo il nostro esercizio:
Per prima cosa dobbiamo aprire il database Access XP chiamato Northwindquesto database lo possiamo ricercare con gli
strumenti di ricerca di Windows oppure puntando precisamente alla cartella: Program Files\Microsoft Office\Office10\Samples
Aperto il Database ci mettiamo in modalit Query e creiamo una nuova query possibilmente senza utilizzare
lautocomposizione di Access
Quando creiamo una nuova query ci viene richiesto di selezionare le tabelle interessate alla queryselezioniamo: Products
e Order Details ed inseriamo successivamente i campi e le condizioni come quelle presenti nella Figura 2
Eseguiamo la Query e verifichiamo se il risultato ottenuto lo stesso di quello della Figura 3
A questo punto possiamo procedere alla visualizzazione del risultato attraverso la sintassi del linguaggio SQL
E possibile effettuare questo selezionando licona SQL come conferma della query
Premendo questo pulsante notiamo non lesecuzione della query bens la trascrizione completa del comando SQL
Questa operazione ci consente di leggere il comando e quindi cominciare a prendere dimestichezza con il linguaggio SQL,
cominciare a capire le prime regole fondamentali di sintassi, cominciare ad effettuare le prime basilari modifiche alla
sintassima ci consente anche di provare a copiare il comando allinterno di SQL Query Analizer per verificarne lesecuzione
allinterno di SQL Server

Infatti il comando una volta evidenziato e copiato come si vede dalle Figure 5 si pu incollare allinterno di SQL Query
Analizer e provare ad eseguireovviamente il risultato deludente poich il database NorthWind allinterno di Access lo
stesso che troviamo allinterno di SQL Serverquindi i records sono pi o meno gli stessi
Costruzione Query con BooksOnline

Abbiamo effettuato un primo esercizio per prendere dimestichezza con le prime formule e sintassi del Linguaggio Transact
SQLabbiamo per questo chiesto aiuto al potentissimo strumento Query By Example di Access XP
Lesercizio precedente serviva quasi esclusivamente per familiarizzare con gli ambienti che durante questo corso utilizzeremo
molto frequentemente
Adesso ricominciamo a trattare largomento Transact SQL dallinizioparlando di sintassi, di tipologie di comandi, ecc..
La prima cosa importante da dire che abbiamo allinterno del prodotto SQL Server di Microsoft un completissimo manuale
elettronico: il Books Online con lelenco di tutti i comandi con relativa spiegazione della sintassi e relativi esempi da copiare,
incollare per poi modificare e vederne leffetto allinterno di Query Analyzerovviamente possiamo anche aggiungere che a
differenza dei comuni testi cartacei si possono, su quello elettronico, effettuare delle sofisticatissime query per argomento o
addirittura per singola parola
Unaltra prova significativa che possiamo provare ad effettuare come conseguenza delle precedente, dove per il nostro
esempio abbiamo chiesto aiuto ad Access XP, quella di eseguire un sofisticato comando Transact SQL prendendolo in
prestito completamente da un esempio pubblicato allinterno del Books Online di SQL Serveril comando che utilizzeremo il
primo che normalmente si prova a digitare allinterno di Query Analyzer e che forse abbiamo almeno una volta digitatoossia
il famosissimo ed utilizzatissimo comando SELECT
Proveremo quindi ad eseguire un complesso comando SELECT copiandolo completamente da un esempio del Books Online
Apriamo il Books Online di SQL Server e selezionando index digitiamo la parola SELECTci accorgiamo che in
corrispondenza del termine Select troviamo tutta una serie di comandi elencati in ordine alfabeticotra questi troviamo quasi
allinizio examplesdove notiamo sulla destra tutta una serie di esempi, da molto semplici a molto complessi, di applicazioni

varie del comando Selectproviamo a copiare e ad eseguire allinterno di Query Analyzer il primo esempio come si vede dalla
SlideSuccessivamente (facendo utilizzo di questa tecnica) possiamo provare a copiare e modificare esempi sempre pi
complessi
Come abbiamo potuto vedere ci sono diverse tecniche iniziali che ci permettono di affrontare lo studio del linguaggio
Transact SQL avvalendoci di esempi che possiamo successivamente modificare e personalizzareovviamente fatte le prime
prove giusto affrontare lo studio della teoria della sintassi
Studio del Linguaggio DDL, DCL, DML

Effettuati i primi esercizi di ambientamento possiamo iniziare finalmente a prendere in esame il Linguaggio Transact SQL di
Microsoft SQL Server partendo dalle definizionila prima definizione che possiamo dare la seguente:
Un'istruzione Transact SQL formata da elementi di codice che permettono di eseguire azioni su oggetti o sui dati di un
database
SQL Server supporta tre tipologie di istruzioni Transact SQL: Data Definition Language, Data Control Language e Data
Manipolation Language
Data Definition Language (DDL) utilizzato principalmente per definire e gestire tutti gli attributi e le propriet di un
Database come ad esempio le Impostazioni di Riga, le impostazioni di Colonna, quelle che devono essere le colonne chiave,
la posizione dei File e le Strategie di Archiviazione, ecctutte regole attuabili ad oggetti come Database, Tabelle e Viste
I comandi maggiormente utilizzati allinterno di DDL sono CREATE, ALTER e DROP
Data Control Language (DCL) utilizzato per definire e controllare regole sulla gestione delle autorizzazioni allinterno di
SQLdefinizione di Permissions, controllo di accesso, negazione di Permissionstutte quelle attivit che abbiamo analizzato
nel corso precedente e venivano effettuate totalmente da interfaccia grafica con SQL Enterprise Manager dalladministrator
del Server SQLovviamente possibile Attivare o Negare permissions anche senza strumenti graficiad esempio da codice,
o da procedure batchfacendo utilizzo di questi comandi DCL che sono: GRANT, REVOKE e DENY

Data Manipolation Language (DML) viene utilizzato per effettuare attivit di manipolazione dati allinterno degli oggetti definiti
con DDLossia possibile utilizzare tutta una serie di comandi con i quali possiamo effettuare le classiche e consuete attivit
di gestione di record nel databasecome Selezionare, Inserire e Cancella recordcon i comandi fondamentali di DML che
sono appunto SELECT, INSERT, UPDATE e DELETE

A questo punto con DDL, DCL e DML siamo in possesso della prima serie di comandi fondamentali che ci consentono di
effettuare le operazioni principali allinterno di SQL Server attraverso il linguaggio transazionale Transact SQL come la
creazione o la cancellazione di Tabelle o Databaseoperazioni amministrative quali lattivazione o la negazione di accessi a
singoli oggetti (ad esempio tabelle o viste) o addirittura a singoli campi di singole tabellefino ad arrivare ad effettuare
operazioni pi frequenti come Query su tabelle o su viste, Inserimento, Modifica e Cancellazione di gruppi di record ad
esempio da Tabelle o da Viste, ecc
La Normalizzazione

Nel corso precedente abbiamo parlato di come creare database e tabelle


Abbiamo utilizzato il programma di amministrazione SQL Enterprise Manager ed abbiamo visto come semplice creare un
nuovo Database facendo anche utilizzo delle procedure guidate
Non abbiamo per fatto alcun tipo di considerazione sulle procedure logiche di creazione di un databaseo sulle regole di
ottimizzazione e normalizzazione di un databasechiaramente pensare di creare un database ben progettato significa avere
un aumento considerevole delle performanceper normalizzazione della progettazione logica di un database si intendono
tutta una serie di metodi che consistono nella suddivisione dei dati in pi tabelle relazionateper database NON normalizzato
si intende un database composto da poche tabelle di grandi dimensioni (con molte colonne)per database normalizzato si
intende ovviamente linverso.. ossia un numero maggiore di tabelle compatte (con poche colonne)
Come dicevamo precedentemente, un database Normalizzato NON aumenta solamente le prestazioni generali del sistema ma
apporta anche tutta una serie di altri vantaggiOrdinamento e Creazione degli indici in maniera pi rapida, le Istruzioni
INSERT, UPDATE e DELETE rispondono in maniera pi rapida grazie ad un numero minore di indici o ad indici sicuramente
pi compatti anche la riduzione generale di inconsistenza dal database migliora sicuramente le prestazioni generali, ecc
Ovviamente con laumento della Normalizzazione in un database tende sicuramente ad aumentare anche la complessit
generale del database stessoquindi il numero di Join.
Microsoft sostiene che una Normalizzazione ragionevole spesso caratterizzata da un numero basso di query eseguite
regolarmente le quali utilizzano join che coinvolgono pi di quattro tabelleovviamente spesso nelle aziende i progetti di
analisi legati a RDBMS sono stati effettuati e quindi potrebbe risultare quasi impensabile decidere di apportare a questi una
ottimizzazione generale come potrebbe essere ad esempio proprio il processo di Normalizzazionein molti casi possibile
agire anche a posterioriovviamente se questo non comporta seri problemi di riprogettazione di tutte quelle che sono le
attivit aziendali generali che girano allinterno di SQL Server come ad esempio le permissions allinterno di oggetti nel
database o di semplici applicazioni che girano sfruttando il database che si intende Normalizzare
Ancora sulla Normalizzazione

A questo punto possiamo provare a fare una specie di elenco di quelle che sono le pratiche consigliate per ottenere un
database che possa essere considerato ben progettato
Per prima cosa in ogni tabella si deve distinguere un identificatore UNIVOCOper identificatore si intende una colonna della
tabella utilizzata esclusivamente per distinguere i record di quella tabella da i record di tute le altre tabelle allinterno del
Databasead ogni tabella poi fondamentale associare un Identificatoredefinito IDche non deve essere possibile
assegnare lo stesso ID a record differenti.questo identificativo di colonna deve poi rappresentare per quella tabella la
chiave primariatutte cose che poi verranno approfondite pi avanti.
Altra regola fondamentale quella di archiviare allinterno di una tabella dati relativi ad una sola entitanche se fisicamente
possibile includere allinterno di una tabella informazioni riguardanti entit differentiad esempio nella tabella PUBS (che
come sappiamo tratta pubblicazioni) le informazioni relative ai titoli e quelle relative agli editori sono archiviate in tabelle
differentise avessimo archiviato queste informazioni nella stessa tabella e avessimo dovuto modificare ad esempio le
informazioni relative allindirizzo delleditore, avremmo DOVUTO apportare le modifiche ad ogni libro e quindi avremmo
dovuto apportare moltissime modifiche ridondanti e avremmo perci molti pi dati allinterno del databasepossiamo in
questo caso ad esempio parlare di normalizzazione e quindi di ordine e performance.
Molto importante anche non includere in una tabella valori di tipo NULLanche se fisicamente possibile ed in certi casi
persino molto comodoper valore Null si intende un record non valorizzatoossia un record che non contiene nessun
valorene zero ne blanksi consiglia quindi di non utilizzare valori Null in un database poich questi richiedono una gestione
speciale che aumenta la complessit delle operazioni che vengono svolte sui datiquindi se si deve per forza di cose far
utilizzo di colonne Nullsi consiglia di inserire queste colonne in una tabella separata opportunamente collegata
Altro consiglio fondamentale quello di non includere allinterno di una tabella valori ripetutise ad esempio una tabella di
titoli di libri presentasse autori e coautoriper evitare di inserire gli stessi nomi a fronte di ogni record e quindi appesantire
fortemente la tabella di informazioni ridondantisarebbe ad esempio consigliabile creare una seconda tabella (anche questa
opportunamente collegata) che riporti solo lID dellibro e lID dellautoretutto questo sempre per garantire un elevato livello
di Normalizzazione ed Ottimizzazione della struttura logica dei dati

Elementi di Sintassi T-SQL CREATE DATABASE

Come ogni linguaggio di programmazione (anche se Transact SQL decisamente orientato al Database) anche in Transact
SQL esistono elementi di sintassigli elementi di sintassi in Transact SQL sono i seguenti: su slide Identificatori, Variabili,
Funzioni, Tipi di Dati, Espressioni, Elementi per il Controllo di Flusso e Commentitutti i comandi Transact SQL appartengono
ad una di queste categorieiniziamo a studiare i comandi che appartengono alla categoria Data Definition Language
(DDL)ossia comandi che consentono di creare, modificare ed eliminare oggetti databaseiniziamo con la creazione di un
database facendo utilizzo del comando CREATE DATABASE
Si tratta del primo comando Transact SQL che ufficialmente scriviamo e quindi dobbiamo fare tutta una serie di
considerazioniper prima cosa dobbiamo aprire Query Analyzer ed effettuare il logon a SQL Server come Amministratore o
come Login che ha le permissions per poter creare Database (ad esempio potremmo avere il Server Role Database
Creator)successivamente dobbiamo scrivere il comando CREATE DATABASE e tutta una serie di altre informazioni relative
al comando in questioneprima di scrivere qualsiasi cosa dobbiamo verificare che sia aperto il Database MASTERinfatti
tutte le attivit che vanno in qualche modo ad interagire con il sistema (in questo caso la creazione di un database
sicuramente unattivit da considerarsi di sistema) vengono archiviate allinterno del Database Master e quindi questo
database deve necessariamente essere aperto prima della scrittura del comandoPer aprire il database Master si digita il
comando USE MASTER e successivamente il comando GOil primo comandoUSE MASTERovviamente serve per aprire
il database ed il successivo comando GO per eseguire la procedura di apertura
Il comando Create Database richiede ovviamente il nome del database che stiamo creando e tutta una serie di parametri che
sono:il NAMEossia un nome del FILE GROUP nel quale stiamo inserendo il nostro database, il FILENAMEche di fatto la
path intera nella quale andremo ad inserire il nostro database, la dimensione iniziale espressa in MBla dimensione massima
che deve raggiungere il Database (anche questa espressa in MBlasciando vuoto questo parametro non indichiamo nessun
limite di crescita)ed infine il valore di crescita del Database espresso in MB (era possibile esprimere questo valore anche in
Percentuale)se abbiamo rispettato tutte le regole di sintassiossia parentesi, virgole, eccil nostro database PRODOTTI

dovrebbe essere stato creatoper verificarlo possiamo andare in SQL Enterprise Manager e dopo aver effettuato un Refresh
lo possiamo trovare allinterno della voce Database insieme a tutti gli altri
Proviamo ad affrontare lo studio dei DATA TYPE

Chi ha creato un database in Access si sicuramente trovato a combattere con il concetto di Data Type
Per Data Type o Tipi di Dati si intende la possibilit, ad esempio in fase di creazione di una tabella, di decidere le tipologie
di informazioni che possono essere inserite allinterno dei record di una tabellaOvviamente una delle prime considerazioni
che ci troviamo a fare in fase di progettazione di una tabella sicuramente quella di stabilire le tipologie di dati che dovranno
essere inserite allinterno della tabella stessai Data Types utilizzabili allinterno di Access sono moltissimipossiamo
utilizzare un campo di tipo Testuale, un campo di tipo Numerico, un campo di tipo Data/Ora, un campo di tipo Valore
Logico, un campo di tipo Valuta, ecc sono in effetti moltissimi e per ogni tipo ci sono delle altre sotto-classificazioni
Ovviamente se riportiamo lo stesso argomento allinterno di SQL Server concettualmente non troviamo grosse variazionima
sicuramente notiamo delle differenziazioni nel numero di Data Types utilizzabiliIl numero di possibilit di scelta di tipi di
campo che abbiamo in SQL Server in effetti spaventosopossiamo quindi provare a suddividere i Data Types in
Categorie:Dati Binari (costituiti da numeri esadecimali dove la lunghezza espressa in K), Dati di tipo Carattere (sono
accettate tutte le combinazioni di Lettere, Simboli e Numeri)

Dati di tipo Data/Ora (scrivere ad esempio 10/12/98 oppure 1.28.36),

Dati Numerici (Solo Numeri.Numeri Positivi, Negativi, Frazionari e Numeri Interi),

Dati Decimal (pi il numero lungo, pi byte servono per archiviarlo es.: il numero 4723,456 richiede sicuramente pi byte
del numero 4,5), Dati Numerici Approssimati (Dati che vengono salvati nel modo pi accurato possibile),

Dati di tipo Valuta (che come noto rappresentano importi positivi o negativi)

ed in fine Dati Definiti dallUtente

Una specie di Templates (ossia di modelli) creati dallutente (o sempre comunque da chi ha le permissions sul database) che
vengono messi a fattor comune nel databaseuna volta creati questi tipi di dati personalizzati possono diventare patrimonio
comune per tutti gli oggetti del databasecome se di fatto fossero messi a disposizione direttamente da SQL Server

Creiamo una Tabella

Abbiamo appunto parlato di tipi di dati SQL Server ed anche di Tipi di dati definiti dallutentea questo punto siamo pronti
per la creazione della nostra prima tabellaovviamente proveremo a fare una tabella di esempio facendo utilizzo di alcuni tipi
di dati studiati precedentementecreeremo infatti una tabella chiamata Pubblicazioni con solo sei campi che sono
rispettivamente lIdentificativo del Libro, il Titolo, lAutore, la Data di Pubblicazione, il Numero di Pagine ed il Prezzo
di Copertina
Per creare questa semplice tabella dobbiamo identificare quali sono i tipi di dati che ci potranno essere utiliper memorizzare
lIdentificativo del Libro utilizzeremo il tipo di dato CHAR poich il codice del libro di tipo testuale ed anche abbastanza
lungo, per il Titolo e per lAutore utilizzeremo un tipo di campo Caratterefaremo utilizzo della tipologia
VARCHARvarchar molto comodo poich permette di allocare semplicemente lo spazio utilizzato dal dato (a differenza ad
esempio di CHAR che occupa sempre 8000 Bytea prescindere da quanto sia leffettiva lunghezza del dato)per quanto
riguarda invece la Data di Pubblicazione faremo ovviamente uso del campo DATA/ORAper archiviare il Numero Pagine
faremo uso della categoria DATI NUMERICIdi questa categoria fanno parte quattro tipi di dati che sono rispettivamente:
BIGINT, INT, SMALLINT e TINYINTchiaramente pi saliamo di categoria e pi sar grande il numero che possiamo
archiviare (BIGINT ad esempio pu contenere numeri grandi fino a 19 cifre)non possiamo per il nostro campo Numero di
Pagine fare utilizzo di TINYINT poich in grado di memorizzare solo numeri che vanno da 0 a 255 (ci sono sicuramente
libri che hanno molte pi pagine!!)..quindi opteremo per SMALLINT che in grado di memorizzare numeri che vanno da 32768 a +32768per lultimo campo, Prezzo di Copertina, faremo utilizzo della categoria DATI DI TIPO VALUTAed
anche in questo caso dovremo far utilizzo del tipo dati SMALLMONEY che contiene numeri che vanno da circa -214748 a
+214748come valeva per la categoria DATI NUMERICI anche per questa categoria esiste il tipo di dati MONEY che in
grado di memorizzare numeri fino a 15 cifre circache per il nostro campo Prezzo di Copertina sicuramente esagerato
A questo punto possiamo scrivere il comando per realizzare la nostra tabella Pubblicazioni copiandolo dalla Slide ed
eseguirloin questo modo abbiamo creato la nostra prima struttura di Tabella.non ci resta a questo punto di inserire
qualche libro!!

Inserimento di Record

Nella lezione precedente ci siamo divertiti a creare la tabella Pubblicazioni specificando diverse tipologie di campo...
Ovviamente sarebbe opportuno inserire dei record allinterno della tabellaper fare questo possiamo ricorrere ad una ottima
interfaccia grafica offerta gentilmente da SQL Enterprise Manager che possiamo vedere nella parte superiore della slidenella
quale possiamo inserire i nostri record esattamente come facciamo normalmente con Access (sembrano essere addirittura lo
stesso strumento)
Adesso dobbiamo immaginare in che modo i record possono venire inseriti nella nostra tabella SQL Server appena creata
Ovviamente non possiamo pensare che lutente possa avere sul suo computer locale SQL Enterprise Manager ed inserire
record manualmente utilizzando la console di amministrazione come se fosse un banalissimo strumento client
quindi dobbiamo immaginare almeno due tipologie di inserimento record. la prima con il vero strumento client di SQL
Server che sappiamo tutti essere Accessquindi il nostro ipotetico utente apre dal suo computer locale Access, si connette al
database passando ad esempio per una connessione ODBC (precedentemente creata dallamministratore di SQL
Server)effettua lautenticazione al database (inserendo Username e Password) e si Linka le tabelle che desidera
visualizzare o addirittura modificare (sempre in base alle permissions che gli sono state date dal server)
questa una prima ipotesiun client Access che accede a dei dati pubblicati da un Server SQL utilizzando ODBC come Data
Provideruna seconda ipotesi potrebbe essere quella di pensare ad un Batch SQL Server (che pi avanti impareremo a
conoscere con il nome di Stored Procedure) che inserisce, al verificarsi di una serie di condizioni, dei record in maniera del
tutto automatica allinterno di una serie di tabelle del nostro databasequindi non fisicamente un utente ad inserire i
recordma una procedura automatizzatain questo modo ovviamente tutto deve funzionare perfettamentenon ci deve
essere nessun tipo di imprevistonon si pu immaginare che il nostro Batch ad un certo si possa bloccarequindi stiamo
parlando di una procedura perfettamente ingegnerizzata che inserisca dei record al posto nostroma come possibile
inserire un record o una serie di record con dei comandi Transact SQLsemplicefacendo utilizzo del comando INSERT INTO
con una sintassi che possiamo forse apprezzare meglio nella slide

In questo esempio abbiamo quindi analizzato tre diversi modi di inserire record allinterno di SQL ServerEnterprise Manager
di SQL Server, Access XP con collegamento ODBC ed infine comando INSERT INTO di Transact SQL

Scrittura di semplicissime Query

Precedentemente abbiamo visto come eseguire una query facendo utilizzo del Books Onlineabbiamo infatti ricercato il
comando SELECT ed abbiamo successivamente copiato un esempio dal manuale
Dopo aver studiato le regole per la creazione di Database, creato un nostro Database, creata una nostra Tabella ed inserito
dei record allinterno di questa tabella, potrebbe essere interessante provare ad effettuare una query sulla tabellala
differenza rispetto a prima che adesso cerchiamo di approfondire il comando SELECT e soprattutto proviamo ad effettuare
delle prove pratiche su oggetti creati da noi e quindi molto pi familiari
Se proviamo a ricercare il comando SELECT allinterno del nostro Books Online ci accorgiamo che dispone di una Sintassi
molto lunga e articolataQuesto comando infatti molto utilizzato ed apparentemente sembra molto semplice ed intuitivo
ma composto di tantissimi elementi di sintassi che lo rendono molto potente ma nello stesso tempo molto complesso.
Proviamo ora a scrivere il primo comando SELECT digitandolo allinterno di Query Analyzeril comando il seguente:
SELECT * FROM customers quando proviamo ad eseguire questo comando allinterno di Query Analyzer ci vengono
visualizzati dei recodsquesto gruppo di records viene definito Results Set (o Set dei Risultati)ogni istruzione SELECT
descrive quattro propriet principali che sono:
I Campi che devono essere inseriti nel Results Set, le tabelle dalle quali vengono recuperati i dati per il Results Set, le
condizioni che le righe nella tabella devono soddisfare per dare origine al Results Set ed infine la sequenza di Ordinamento
delle righeproviamo adesso a prendere in esame il comando scritto precedentementeIl simbolo di Asterisco che segue il
comando SELECT indica che vogliamo visualizzare tutti i campi della tabella (altrimenti avremmo potuto specificare solo i
campi che ci interessavano.ciascuno separato da virgola)Listruzione FROM indica al comando SELECT che stiamo
richiamando delle informazioni da una Tabelle o da una Vistacustomers infatti la Tabella dalla quale vogliamo farci

restituire il Results SetNel nostro esempio abbiamo chiesto a SQL Server di visualizzare tutti i Campi e tutti i Records della
tabella CustomersDelle quattro propriet descritte precedentemente ci siamo quindi limitati ad utilizzare solo le prime due (i
campi da visualizzare e la tabella interessata alla query)potevamo utilizzare anche le altre due propriet ed inserire ad
esempio delle condizioni (ossia solo i records di una certa Citto solo quelli che hanno il telefono che comincia per 030)ed
infine avremmo potuto richiedere a SQL Server di consegnarci il Results Set magari visualizzato in ordine Decrescente
Approfondimenti del comando SELECT

Scritto il nostro primo comando Transact SQL SELELCT possiamo iniziare a studiare una serie tutta una serie di Parole
Chiave che potrebbero aiutarci ad estrarre records dalla nostra Tabella (o insieme di tabelle) in maniera pi mirata e
precisala prima Parola Chiave che prendiamo in esame DISTINCT che permette di visualizzare i records che compaiono
una sola volta nella tabellaaltra Parola Chiave interessante TOP n dove n il numero di righe che vogliamo vengano
visualizzate allinterno del Results Set possiamo sia indicare il numero effettivo delle Righe (es.: TOP 120le prime 120
righe) che addirittura la Percentuale di righe (TOP 15 PERCENTil 15 percento dei records della Tabella)
Molto interessante ed utile si presenta la clausola INTO che inserisce il Results Set generato da un comando SELELCT
allinterno di una Nuova tabella creata automaticamente
Nella lezione precedente abbiamo parlato di propriet principali ed abbiamo detto che esistono due propriet molto
importantila prima permette di inserire condizioni nella nostra SELELCT, la seconda di visualizzare i Records del Results Set
in maniera Ordinatala clausole che svolgono questa funzione sono rispettivamente WHERE e ORDER BY

La clausola WHERE molto utilizzata in Transact SQL poich permette di effettuare dei filtri in base al verificarsi di
condizionilesempio riportato nella Slide molto semplice (visualizzare solo i record della Regione WA)ma si possono
effettuare delle WHERE molto complesse ricorrendo agli Operatori Logici come AND, OR, NOT, ecc.
La clausola ORDER BY consente di visualizzare in maniera ordinata il Results Setpossiamo scegliere il tipo di ordinamento
Ascendente (digitando ASC) o quello Discendente (digitando DESC)
Molto utilizzata anche la Clausola GROUP BY che permette di visualizzare una serie di Record allinterno di un Results Set
in maniera raggruppatain questo modo si possono specificare nella SELECT una serie di campi sottoposti a calcoli facendo
utilizzo ad esempio di Funzioni di aggregazione come la somma, la media, il conteggio, ecc.
Molte delle clausole che abbiamo visto in questa lezione possono essere approfondite effettuando delle prove allinterno di
Accessinfatti, come noto, in Access durante la composizione grafica di una Query possibile aggiungere o rimuovere con
estrema facilit una di queste clausole ed osservare con attenzione i conseguenti comportamenti della query che viene
eseguitasenza dimenticare che una volta scritta ed eseguita la query con Access la possiamo visualizzare in codice SQL e
facilmente trasportare allinterno di Query Analyzer e osservarne il comportamento

Introduzione alle SubQuery

Abbiamo trattato largomento SELECT e preso in esame molte delle principali clausole presenti allinterno della sintassi
Ovviamente stiamo affrontando argomenti di programmazione e quindi molto difficile cercare di capire velocemente queste
tematiche senza pensare di impiegare molte ore ad effettuare esercitazioni con difficolt sempre crescente
Dopo aver fatto molte prove con i nostri comandi SELELCT di base possiamo provare ad affrontare un argomento
leggermente pi complesso come le SUBQUERY
Per SUBQUERY (si possono chiamare anche INNER QUERY o INNER SELECT) si intende una istruzione SELECT che restituisce
sempre un Results Set ma nidificata allinterno di unaltra istruzione SELECTper capire meglioun comando SELECT non
restituisce alcun risultato se non viene soddisfatta la condizione della SUBQUERY nidificata al suo internose facciamo
riferimento allesempio della Slide capiamo meglio cosa si intende per SUBQUERY e per SELECT nidificati
Nel nostro esempio abbiamo scelto una Query Nidificata facendo utilizzo delle parole chiave IN o NOT IN che effettuano
una verifica della presenza o della non presenza di record allinterno di tabellequello che vogliamo ottenere effettuare una
selezione di Titoli di Libri dalla Tabella Pubblicazioni solo se il codice del titolo presente nella Tabella Titoli ed appartiene
alla categoria Businessdetta a parole non sembra molto semplicevediamo come impostarla con Transact SQL
Dobbiamo scrivere due Select una dentro laltra (ecco perch definite nidificate)la prima SELELCT effettua una selezione del
campo PUB_NAME (ossia il nome della Pubblicazione) dalla tabella Publishers (che la tabella delle Pubblicazioni)
A questo comando SELECT viene aggiunta la condizione WHERE che prende il campo PUB_ID della tabella Pubblicazioni e lo
va a ricercare allinterno della tabella TITLESma per i soli titoli che fanno parte della Categoria Business
Questo tipo di Query definita SUBQUERY molto interessante poich il Results Set viene visualizzato solo se viene rispettata
la condizione espressa nella seconda Queryquesto tipo di sintassi molto utilizzata allinterno delle Stored Procedures dove
spesso comodo fare particolari elaborazioni solo se vengono soddisfatte contemporaneamente tutte le condizioni
contestualinella parte destra della slide sono stati riportati altri esempi di SUBQUERY per dimostrare quante applicazioni si
possono costruire con questi potenti strumenti