Richiami sul linguaggio SQL

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

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

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

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

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Data Management Software. Il linguaggio SQL. Raggruppamenti. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management Marzo 2004

Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

Il linguaggio SQL: query innestate

SQL (STRUCTURED QUERY LANGUAGE)

Il linguaggio SQL: le basi

DBMS (Data Base Management System)

Istruzioni DML di SQL

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

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

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Gestione delle tabelle

Operazioni sui database

Il linguaggio SQL: DDL di base

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

Basi di Dati: Corso di laboratorio

User Tools: DataBase Manager

IL LINGUAGGIO SQL IDENTIFICATORI E TIPI DI DATI COMANDI E ISTRUZIONI

MAX, SUM, AVG, COUNT)

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

Informatica. Sintassi. Interrogazioni in SQL. Significato dell interrogazione. Tabella Impiegato. Basi di dati parte 4 SQL

Dispensa di database Access

Definizione di domini

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

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

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

OSSIF WEB. Manuale query builder

Linguaggio SQL: fondamenti D B M G. Gestione delle tabelle

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

Lezione V. Aula Multimediale - sabato 29/03/2008

Corso di Informatica (Basi di Dati)

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Informatica per le discipline umanistiche 2 lezione 10

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

Organizzazione degli archivi

Laboratorio di Basi di Dati e Web

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

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

Corso sul linguaggio SQL

SQL (STRUCTURED QUERY LANGUAGE)

SQL. Alcune note sulla definizione dei dati

Il linguaggio SQL: viste e tabelle derivate

SQL - Funzioni di gruppo

Corso sul linguaggio SQL

DATABASE RELAZIONALI

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

PROGRAMMA DI CLASSE 5AI

********************* MODIFICA STRUTTURA DI UNA TABELLA (inserimento di un nuovo campo) ALTER TABLE Personale ADD Nascita date;

SQL Sintassi Dei Comandi

SQL IL LINGUAGGIO DI INTERROGAZIONE

Structured Query Language parte 1


Corso di Informatica Generale 1 IN1. Linguaggio SQL

Istruzioni SQL 1. Query di selezione 2 Istruzione SELECT 2 Istruzione SELECT DISTINCT 2 ORDER BY 3 WHERE 3 La condizione LIKE 4 BETWEEN AND 5

ECDL - Database. European Computer Driving Licence - Modulo 5 - Database LEZIONE 2

Corso di Laboratorio di Basi di Dati

Introduzione ai database relazionali

Introduzione a MySQL

SQL prima parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2011/12

Volumi di riferimento

Access. P a r t e p r i m a

Capitolo 13. Interrogare una base di dati

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

2104 volume III Programmazione

Basi di dati e Sistemi informativi aziendali

SQL e ACCESS. Modello relazionale PROBLEMA ENTITA STUDENTE

Vincoli di Integrità Approccio dichiarativo alla loro implementazione

Le Basi di Dati. Le Basi di Dati

Basi di Dati Corso di Laura in Informatica Umanistica

Laboratorio di Basi di Dati

Basi di dati. L Algebra Relazionale. K. Donno - L Algebra Relazionale

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

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

Il linguaggio SQL. Il linguaggio SQL. Il linguaggio SQL. SQL - Tipi di dato. SQL - Tipi di dato numerici. SQL - Tipi di dato numerici

ESERCIZI DI PROBLEM SOLVING E COMPOSIZIONE DEI DIAGRAMMI DI FLUSSO per le classi terza

CONCETTO DI ANNIDAMENTO

SQL - Tipi di dato Il linguaggio SQL

I database relazionali (Access)

Linguaggio SQL. Structured Query Language

Basi di Dati e Sistemi Informativi. Structured Query Language

Sistemi per la gestione di database: MySQL ( )

Introduzione all Algebra Relazionale

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

Azioni. Select e join non consentono di modificare il contenuto del DB. Inserzione di nuovi dati. Azioni desiderate. Aggiornamento di dati

INFORMATICA GENERALE Prof. Alberto Postiglione. Scienze della Comunicazione Università di Salerno. INFORMATICA GENERALE Prof. Alberto Postiglione

Al giorno d oggi, i sistemi per la gestione di database

MySQL Database Management System

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

Basi di dati SQL. Standardizzazione di SQL. Linguaggi di Interrogazione: SQL. Prof.Angela Bonifati

Giovanna Rosone 04/03/ /03/2010 SQL, Istruzioni per la modifica dello schema

Concetti fondamentali dei database database Cos'è un database Principali database

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

Introduzione al linguaggio SQL

Transcript:

Richiami sul linguaggio SQL Sistemi Informativi Avanzati Anno Accademico 2012/2013 Corso di Laurea Magistrale in Ingegneria Gestionale Reggio Emilia, 8 marzo 2013 UNIVERSITÀ DEGLI STUDI DI MODENA E REGGIO EMILIA

Il linguaggio SQL SQL è il linguaggio standard de facto per DBMS relazionali SEQUEL: Structured English Query Language Ossia un linguaggio di interrogazione dei dati con sintassi molto vicina alla lingua inglese SQL è un linguaggio dichiarativo (non- procedurale), ovvero non specifica la sequenza di operazioni da compiere per ottenere il risultato relazionalmente completo Il modello dei dati di SQL è basato su tabelle anziché relazioni: Possono essere presenti righe (tuple) duplicate

Il linguaggio SQL: Struttura Si divide in tre sottoinsiemi: Data Definition Language (DDL) - permette di creare e cancellare database o di modificarne la struttura Es: CREATE, DROP, ALTER Data Manipulation Language (DML) - permette di inserire, cancellare e modificare i dati Es: SELECT, INSERT, UPDATE, DELETE Data Control Language (DCL) - permette di gestire gli utenti e i permessi Es: GRANT, REVOKE

Data Definition Language Il DDL di SQL permette di definire schemi di relazioni TABLE specificare vincoli ROW definire nuovi domini, oltre a quelli predefiniti (Per vincoli e domini si può anche fare uso del DML) definire viste VIEW efficientemente ai dati Le istruzioni principali sono: CREATE: per creare nuovi database, tabelle, indici, o viste. DROP: per cancellare esistenti database, tabelle, indici, o viste. ALTER: per modificare un oggetto esistente nel database. TRUNCATE: per svuotare irreversibilmente una tabella.

CREATE TABLE Consente di creare una nuova tabella specificando uno o più campi accompagnati dal rispettivo tipo di dato. CREATE TABLE <tabella> ( <campo> <tipo> [ NULL NOT NULL ] [ <chiave> ] [ <vincolo> ], <campo> <tipo> [ NULL NOT NULL ] [ <chiave> ] [ <vincolo> ],... ) Tabella: nome della tabella Campo: nome di una colonna della tabella Tipo: specifica il tipo di dati della colonna (campo) NULL NOT NULL: opzionale, indica se il campo ammette valori nulli o meno Chiave: opzionale, indica che il campo è una chiave (primary key o foreign key) della tabella Vincolo: vincoli aggiuntivi (e opzionali) ai campi

CREATE TABLE: Tipi di Dato (SQL Server 2005) Tipi di dati per SQL SERVER 2005 DATI NUMERICI ESATTI Int: Ammette i valori da - 2147483648 a 2147483647 Numeric (p,s): Possono avere valori compresi tra 10 ^38 +1 e - 10^38-1. p - è la precisione, che rappresenta il numero massimo di cifre decimali che possono essere memorizzate (da entrambe le parti della virgola). Il massimo della precisione è 28 cifre. s - è la scala, che rappresenta il numero di massimo di cifre decimali dopo la virgola e deve essere minore od uguale alla precisione. BIT: Tipo di dati integer che può accettare un valore di 1, 0 o NULL

CREATE TABLE: Tipi di Dato (SQL Server 2005) DATI NUMERICI APPROSSIMATI: Tipi di dati numerici approssimati da utilizzare con dati numerici a virgola mobile. I dati a virgola mobile sono approssimati. Pertanto, non tutti i valori nell'intervallo del tipo di dati possono essere rappresentati in modo esatto. Float (n): il valore n (compreso tra 1 e 53) indica la precisione e le dimensioni di archiviazione. Valore n Precisione Archiviazione 1-24 7 cifre 4 byte 25-53 15 cifre 8 byte Real: dato numerico ad archiviazione a 4 byte Tipo di dato Intervallo Archiviazione FLOAT Da - 1,79E+308 a - 2,23E- 308, 0 e da 2,23E- 308 a 1,79E+308 4 8 byte REAL Da - 3,40E + 38 a - 1,18E - 38, 0 e da 1,18E - 38 a 3,40E + 38 4 byte

CREATE TABLE: Tipi di Dato (SQL Server 2005) DATI CARATTERE Char (n): dati carattere. Ha una lunghezza fissa (n) e può contenere fino ad 8000 caratteri ANSI Varchar (n): dati carattere. Come il tipo Char può contenere fino a 8000 caratteri ANSI, ma ha una lunghezza variabile DATI TEMPORALI Datetime: Dati ora e data. Ammette valori compresi tra il 1 gennaio 1753 al 31 dicembre 9999 (precisione al trecentesimo di secondo) Esempio creazione tabella: CREATE TABLE T_SEDI_REGIONALI( CODICE_SEDE_REGIONALE INT NOT NULL PRIMARY KEY, ) SIGLA_REGIONE varchar(3) NOTNULL, DENOMINAZIONE varchar(60),

Campo IDENTITY Indica che la nuova colonna è una colonna Identity: quando si aggiunge una nuova riga alla tabella, viene assegnato automaticamente un valore univoco e incrementale alla colonna. È possibile creare una sola colonna Identity per ogni tabella. IDENTITY (<seed>,<increment>) Seed: Valore utilizzato per la prima riga caricata nella tabella. Increment: Valore incrementale aggiunto al valore Identity della riga caricata in precedenza. È necessario specificare sia il valore di inizializzazione, sia l'incremento oppure nessuno dei due per impostare di default (1,1) CREATE TABLE nomi_dipendenti( id int IDENTITY (1,1) PRIMARY KEY, nome varchar (80) )

Campo IDENTITY Osservazioni: Se una colonna Identity si trova in una tabella in cui vengono eseguite spesso eliminazioni, è possibile che la sequenza di valori Identity presenti interruzioni. SET IDENTITY_INSERT ON. SET IDENTITY_INSERT nomi_dipendenti ON [..codice di inserimento..] SET IDENTITY_INSERT nomi_dipendenti OFF La proprietà IDENTITY_INSERT può essere impostata su ON per una sola tabella di una sessione. Per questo Se il valore immesso è maggiore del valore Identity corrente per la tabella, il nuovo valore viene utilizzato automaticamente come valore Identity corrente (rif. esempio)

ELIMINAZIONE DATI DROP TABLE: Comando utilizzato per eliminare una tabella e tutti i dati in essa contenuti DROP TABLE <nome tabella> Con l'eliminazione di una tabella, le regole o i valori predefiniti della tabella vengono disassociati e i vincoli associati alla tabella vengono eliminati automaticamente. Se la tabella viene ricreata, è necessario associare nuovamente le regole e i valori predefiniti appropriati e aggiungere tutti i vincoli necessari, perché il DROP TABLE è un processo non reversibile. DELETE: Elimina alcune righe da una tabella. DELETE FROM T_CODICI_MISURA WHERE CODICE = 2 T_CODICI_MISURA CODICE DESCRIZIONE 1 Lavoro Autonomo 2 Microimpresa 3 Franchising T_CODICI_MISURA CODICE DESCRIZIONE 1 Lavoro Autonomo 3 Franchising Se non viene specificata alcuna clausola WHERE, DELETE rimuove tutte le righe rollback spazio di storage dei dati.

ELIMINAZIONE DATI TRUNCATE TABLE: Rimuove tutte le righe da una tabella. TRUNCATE TABLE è simile all'istruzione DELETE senza clausola WHERE, ma non è possibile fare il rollback. Per questo è più veloce rispetto alla DELETE (non utilizza spazio di undo come la DELETE). Utilizzando la DROP STORAGE option, viene eliminato lo spazio di storage dei dati. T_CODICI_MISURA ES: TRUNCATE TABLE T_CODICI_MISURA CODICE DESCRIZIONE 1 Lavoro Autonomo 2 Microimpresa 3 Franchising T_CODICI_MISURA CODICE DESCRIZIONE OSSERVAZIONI: Se si eliminano tutte le righe di una tabella con DELETE o TRUNCATE TABLE, la tabella continua a esistere fino a quando non viene eliminata Le istruzioni DELETE e TRUNCATE TABLE possono avere esito negativo se tentano di rimuovere una riga a cui fanno riferimento i dati di un'altra tabella contenente un vincolo FOREIGN KEY

Data Manipulation Language Data Manipulation Language (DML) è un linguaggio di programmazione che consente di leggere, inserire, modificare o eliminare i dati in un database. Le istruzioni principali del DML di SQL sono SELECT: esegue interrogazioni (query) sul DB INSERT: inserisce nuove tuple nel DB DELETE: cancella tuple dal DB UPDATE: modifica tuple del DB

Il caso di esempio (1/3) strutturata: T_TITOLI_STUDIO T_CODICI_MISURA T_SEDI_REGIONALI CODICE DESCRIZIONE int varchar(50) <pk> CODICE DESCRIZIONE int varchar(50) <pk> CODICE_SEDE_REGIONALE SIGLA_REGIONE DENOMINAZIONE int varchar(3) varchar(60) <pk> CODICE = TITOLO_STUDIO CODICE = MISURA CODICE_SEDE_REGIONALE = SEDE_REGIONALE_COMPETENTE T_AUTENTICAZIONI CODICE_PROPONENTE bigint CODICE_FISCALE varchar(16) COGNOME varchar(70) NOME varchar(70) DATA_REGISTRAZIONE varchar(255) SESSO varchar(1) TITOLO_STUDIO int <pk> <fk> T_DATI_AMMISSIONE PROTOCOLLO INVESTIMENTO_AMMESSO GESTIONE_AMMESSO DATA_DELIBERA CAPITALE_AMMESSO MUTUO_AMMESSO COSTO_ASSISTENZA_TECNICA DATA_REVOCA varchar(7) float(15) float(15) varchar(255) float(15) float(15) float(15) varchar(255) <pk,fk> T_DOMANDE PROTOCOLLO CODICE_PROPONENTE = CODICE_PROPONENTE CODICE_PROPONENTE MISURA CODICE_STATO DATA_RICEZIONE SEDE_REGIONALE_COMPETENTE varchar(7) bigint int varchar(3) varchar(255) int <pk> <fk1> <fk3> <fk2> PROTOCOLLO = PROTOCOLLO

Il caso di esempio (2/3) T_AUTENTICAZIONI CODICE_ PROPONENTE CODICE_FISCALE COGNOME NOME DATA_ REGISTRAZIONE SESSO TITOLO_ STUDIO 88114 SCVNDR79B23G479H SCAVOLINI ANDREA 24/01/2007 M 6 88115 BNLBRB79J12G499K BONOLI BARBARA 20/01/2007 F 3 88122 GDNMTT78A12AD54L GHEDINI MATTEO 12/04/2006 M 3 T_DOMANDE PROTOCOLLO CODICE_ PROPONENTE MISURA CODICE_ STATO DATA_ RICEZIONE SEDE_REGIONALE_C OMPETENTE 2344633 88114 1 E1A 12/02/2007 3 2344635 88115 2 E1B 21/03/2007 6 2344639 88122 2 E1A 05/02/2007 90 T_DATI_AMMISSIONE PROTOCOLLO INVESTIMENTO_ AMMESSO GESTIONE_ AMMESSO DATA_ DELIBERA CAPITALE_ AMMESSO MUTUO_ AMMESSO DATA_REVOCA 2344633 25709,01 5164,57 09/09/2007 10272,22 15436,79 2344635 24950 5164,57 03/03/2007 9892,72 15057,28 2344639 7000 5164,57 03/03/2007 917,72 6082,28 29/12/2007

Il caso di esempio (3/3) T_SEDI_REGIONALI CODICE_SEDE_R EGIONALE SIGLA_ REGIONE DENOMINAZIONE 1 ABR Sviluppo Italia Abruzzo 2 BAS Sviluppo Italia Basilicata 3 CAL Sviluppo Italia Calabria 4 CAM Sviluppo Italia Campania 5 FRI Sviluppo Italia Friuli Venezia Giulia 6 LAZ Sviluppo Italia S.p.A. - Unita Lazio 7 LIG Sviluppo Italia Liguria 8 MAR Sviluppo Italia Marche 9 MOL Sviluppo Italia Molise 10 PUG Sviluppo Italia Puglia 11 SAR Sviluppo Italia Sardegna 12 SIC Sviluppo Italia Sicilia 13 TOS Sviluppo Italia Toscana 14 UMB B.I.C. Umbria 15 VEN Sviluppo Italia Veneto 16 EMI Sviluppo Italia Emilia Romagna T_TITOLI_STUDIO CODICE DESCRIZIONE 1 SCUOLA ELEMENTARE 2 SCUOLA MEDIA INFERIORE 3 SCUOLA MEDIA SUPERIORE 4 SCUOLA FINI SPECIALISTICI 5 LAUREA BREVE 6 LAUREA 7 CORSI POST LAUREA \ MASTER T_CODICI_MISURA CODICE DESCRIZIONE 1 Lavoro Autonomo 2 Microimpresa 3 Franchising 17 PIE Sviluppo Italia Piemonte 19 LOM Sviluppo Italia Lombardia 90 LAZ Sviluppo Italia S.p.A. - Sede centrale 99 LAZ Sviluppo Italia S.p.A. - Funzione Franchising

Il linguaggio SQL Data Manipulation Language

SELECT La clausola SELECT viene utilizzata per le interrogazioni (query) delle basi dati relazionali. La sintassi (presa dal manuale di Microsoft SQL Server): SELECT select_list [ INTO new_table ] FROM table_source [ WHERE search_condition ] [ GROUP BY group_by_expression ] [ HAVING search_condition ] [ ORDER BY order_expression [ ASC DESC ] ] Esempio: SELECT COGNOME, NOME, SESSO FROM T_AUTENTICAZIONI COGNOME NOME SESSO SCAVOLINI ANDREA M BONOLI BARBARA F GHEDINI MATTEO M

WHERE La SELECT list definisce cosa si vuole come risultato La clausola FROM indica da dove si prendono i dati La clausola WHERE indica quali condizioni deve soddisfare Esempio: SELECT COGNOME, NOME, SESSO FROM T_AUTENTICAZIONI COGNOME NOME SESSO SCAVOLINI ANDREA M GHEDINI MATTEO M Se si vogliono tutti gli attributi si utilizza la target list speciale * SELECT * FROM T_AUTENTICAZIONI WHERE SESSO='M' CODICE_ PROPONENTE CODICE_FISCALE COGNOME NOME DATA_ REGISTRAZIONE SESSO TITOLO_ STUDIO 88114 SCVNDR79B23G479H SCAVOLINI ANDREA 24/01/2007 M 6 88122 GDNMTT78A12AD54L GHEDINI MATTEO 12/04/2006 M 3

Tabelle vs. Relazioni: DISTINCT Il risultato di una query SQL può contenere righe duplicate: SELECT SESSO FROM T_AUTENTICAZIONI SESSO M M F DISTINCT nella SELECT list: SELECT DISTINCT SESSO FROM T_AUTENTICAZIONI SESSO M F

Tabelle vs. Relazioni: ORDER BY ordinamento ha senso SELECT * FROM T_AUTENTICAZIONI CODICE_ PROPONENTE CODICE_FISCALE COGNOME NOME DATA_ REGISTRAZIONE SESSO TITOLO_ STUDIO 88114 SCVNDR79B23G479H SCAVOLINI ANDREA 24/01/2007 M 6 88115 BNLBRB79J12G499K BONOLI BARBARA 20/01/2007 F 3 88122 GDNMTT78A12AD54L GHEDINI MATTEO 12/04/2006 M 3 Con ordinamento utilizzo la clausola ORDER BY SELECT * FROM T_AUTENTICAZIONI ORDER BY SESSO DESC, COGNOME ASC CODICE_ PROPONENTE CODICE_FISCALE COGNOME NOME DATA_ REGISTRAZIONE SESSO TITOLO_ STUDIO 88122 GDNMTT78A12AD54L GHEDINI MATTEO 12/04/2006 M 3 88114 SCVNDR79B23G479H SCAVOLINI ANDREA 24/01/2007 M 6 88115 BNLBRB79J12G499K BONOLI BARBARA 20/01/2007 F 3

Espressioni nella clausola SELECT La SELECT list può contenere non solo attributi, ma anche espressioni: SELECT PROTOCOLLO, CAPITALE_AMMESSO*2 FROM T_DATI_AMMISSIONE PROTOCOLLO (Si noti che in questo caso la seconda colonna non ha un nome) 2344633 20544,44 2344635 19785,44 2344639 1835,44 È possibile associare un nome a piacere ad ogni elemento della SELECT list mediante la parola chiave AS: SELECT PROTOCOLLO, CAPITALE_AMMESSO*2 AS CAPITALE_DOPPIO FROM T_DATI_AMMISSIONE PROTOCOLLO CAPITALE_DO PPIO (La parola chiave AS può anche essere omessa) 2344633 20544,44 2344635 19785,44 2344639 1835,44

Pseudonimi Per chiarezza, ogni nome di colonna può essere scritto prefissandolo con il nome della tabella: SELECT T_DATI_AMMISSIONE.PROTOCOLLO, T_DATI_AMMISSIONE.CAPITALE_AMMESSO*2 AS CAPITALE_DOPPIO FROM T_DATI_AMMISSIONE si può anche usare uno pseudonimo (alias) in luogo del nome della tabella: SELECT d.protocollo, d.capitale_ammesso*2 AS CAPITALE_DOPPIO FROM T_DATI_AMMISSIONE AS d Anche qui la parola chiave AS può anche essere omessa.

Utenze e Database In generale ogni tabella può essere indirizzata come: database.utente.tabella Es: CORSO_SQL.dbo.T_DATI_AMMISSIONE ove CORSO_SQL è il database e dbo NB: questo è molto importante quando si utilizzano utenze che non sono system administrator (che non hanno i diritti di dbo) Es: automaticamente creata come andrea.t_dati_ammissione se interrogo la base dati con un utenza system administrator: SELECT * FROM T_DATI_AMMISSIONE genererà un errore perché SQL cercherebbe la tabella dbo.t_dati_ammissione che non esiste! Va quindi specificato: SELECT * FROM andrea.t_dati_ammissione

Operatori di Confronto Gli operatori di confronto servono a determinare uguaglianze e disuguaglianze tra valori e ad effettuare ricerche all'interno dei dati: = Esprime uguaglianza tra due valori numerici LIKE Esprime somiglianza tra due valori letterali < Stabilisce se un valore è minore di un altro > Stabilisce se un valore è maggiore di un altro <= Stabilisce se un valore è minore o uguale di un altro >= Stabilisce se un valore è maggiore o uguale di un altro!= Stabilisce se due valori sono diversi tra loro BETWEEN Recupera un valore compreso tra due valori IN Stabilisce se un valore è contenuto in una lista di valori possibili EXISTS Stabilisce se un determinato record esiste

Operatori Logici Gli operatori logici di SQL sono AND (e), OR (o, oppure) e NOT (non); possono essere ripetuti più volte all'interno dell'elenco delle condizioni di ricerca. L'operatore logico AND, che lega due (o più) condizioni, serve ad indicare alla ricerca di restituire tutte le tuple per le quali le due (o più) condizioni espresse sono tutte vere contemporaneamente. L'operatore logico OR, che lega due (o più) condizioni, serve ad indicare alla ricerca di restituire tutte le tuple per le quali anche soltanto una delle due (o più) condizioni espresse è vera. L'operatore NOT inverte il valore ad esso associato: se è vero restituisce un valore falso, mentre se è falso restituisce un valore vero. L'uso delle parentesi tonde ( ) all'interno dell'elenco delle condizioni di ricerca consente di combinare condizioni differenti utilizzando entrambi i tipi di operatori logici per creare condizioni complesse.

Operatore LIKE LIKE wildcard _ (un carattere arbitrario) e % (una stringa pattern In parole povere _ indica un qualsiasi carattere, % un qualsiasi insieme di caratteri Esempio: SELECT NOME FROM T_AUTENTICAZIONI WHERE NOME LIKE '%A' NOME ANDREA BARBARA Esempio: SELECT NOME FROM T_AUTENTICAZIONI WHERE NOME LIKE '%E_' NOME ANDREA MATTEO

Operatore BETWEEN BETWEEN permette di esprimere condizioni di appartenenza a un intervallo Es: Protocollo e investimento ammesso delle domande che hanno un investimento ammesso tra 10.000 e 30.000 (estremi inclusi) SELECT PROTOCOLLO, INVESTIMENTO_AMMESSO FROM T_DATI_AMMISSIONE WHERE INVESTIMENTO_AMMESSO BETWEEN 10000 AND 30000 PROTOCOLLO INVESTIMENTO_AM MESSO 2344633 25709,01 2344635 24950

Operatore IN IN permette di esprimere condizioni di appartenenza a un insieme SELECT * FROM T_AUTENTICAZIONI WHERE NOME IN ('Matteo', 'Barbara') CODICE_ PROPONENTE CODICE_FISCALE COGNOME NOME DATA_ REGISTRAZIONE SESSO TITOLO_ STUDIO 88115 BNLBRB79J12G499K BONOLI BARBARA 20/01/2007 F 3 88122 GDNMTT78A12AD54L GHEDINI MATTEO 12/04/2006 M 3 Lo stesso risultato si ottiene scrivendo: SELECT * FROM T_AUTENTICAZIONI WHERE NOME ='Matteo' OR NOME='Barbara'

Valore NULL Fate attenzione ai valori nulli! Es: STIPENDI NOME STIPENDIO Andrea 400 Carlo 300 Luca NULL Davide 1000 SELECT * FROM STIPENDI WHERE STIPENDIO<500 NOME STIPENDIO Andrea 400 Carlo 300 I valori NULL vengono eliminati dagli operatori di confronto!

Is NULL Quindi se vorrei tutti gli stipendi minori di 500 o non valorizzati: Es: STIPENDI NOME STIPENDIO Andrea 400 Carlo 300 Luca NULL Davide 1000 SELECT * FROM STIPENDI WHERE STIPENDIO<500 OR STIPENDIO IS NULL NOME STIPENDIO Andrea 400 Carlo 300 Luca NULL Se volessi tutti quelli non nulli SELECT * FROM STIPENDI WHERE STIPENDIO IS NOT NULL NOME STIPENDIO Andrea 400 Carlo 300 Davide 1000

Il caso di esempio T_AUTENTICAZIONI CODICE_ PROPONENTE CODICE_FISCALE COGNOME NOME DATA_ REGISTRAZIONE SESSO TITOLO_ STUDIO 88114 SCVNDR79B23G479H SCAVOLINI ANDREA 24/01/2007 M 6 88115 BNLBRB79J12G499K BONOLI BARBARA 20/01/2007 F 3 88122 GDNMTT78A12AD54L GHEDINI MATTEO 12/04/2006 M 3 T_DOMANDE PROTOCOLLO CODICE_ PROPONENTE MISURA CODICE_ STATO DATA_ RICEZIONE SEDE_REGIONALE_C OMPETENTE 2344633 88114 1 E1A 12/02/2007 3 2344635 88115 2 E1B 21/03/2007 6 2344639 88122 2 E1A 05/02/2007 90

JOIN implicito JOIN di più tabelle. La più usata è il JOIN implicito: SELECT d.protocollo, d. DATA_RICEZIONE, a.cognome, a.nome FROM T_DOMANDE d, T_AUTENTICAZIONI a WHERE a.codice_proponente=d.codice_proponente PROTOCOLLO DATA_ RICEZIONE COGNOME NOME Che si interpreta come segue: 2344635 21/03/2007 BONOLI BARBARA Si esegue il prodotto Cartesiano (tutte le combinazioni) tra le tabelle T_DOMANDE e T_AUTENTICAZIONI Si applicano i predicati della clausola WHERE Si estraggono le colonne della SELECT list Il predicato a.codice_proponente=d.codice_proponente è detto predicato di join, in quanto stabilisce il criterio con cui le tuple di T_DOMANDE e di T_AUTENTICAZIONI devono essere combinate

JOIN: osservazione Se le due tabelle contengono colonne con lo stesso nome, è obbligatorio anteporre lo pseudonimo (ad esempio per PROTOCOLLO): SELECT d.protocollo, d. DATA_RICEZIONE, a.cognome, a.nome FROM T_DOMANDE d, T_AUTENTICAZIONI a WHERE a.codice_proponente=d.codice_proponente PROTOCOLLO DATA_ RICEZIONE COGNOME NOME 2344635 21/03/2007 BONOLI BARBARA 2344633 12/02/2007 SCAVOLINI ANDREA 2344639 05/02/2007 GHEDINI MATTEO

INNER JOIN Anziché scrivere i predicati di join nella clausola WHERE, è possibile ottenere una joined table direttamente nella clausola FROM. SELECT d.protocollo, d. DATA_RICEZIONE, a.cognome, a.nome FROM T_DOMANDE d JOIN T_AUTENTICAZIONI a ON a.codice_proponente=d.codice_proponente PROTOCOLLO DATA_ RICEZIONE COGNOME NOME 2344635 21/03/2007 BONOLI BARBARA 2344633 12/02/2007 SCAVOLINI ANDREA 2344639 05/02/2007 GHEDINI MATTEO

INNER JOIN Anziché scrivere i predicati di join nella clausola WHERE, è possibile ottenere una joined table direttamente nella clausola FROM. SELECT d.protocollo, d. DATA_RICEZIONE, a.cognome, a.nome FROM T_DOMANDE d JOIN T_AUTENTICAZIONI a ON a.codice_proponente=d.codice_proponente WHERE a.nome='barbara' PROTOCOLLO DATA_ RICEZIONE COGNOME NOME 2344635 21/03/2007 BONOLI BARBARA in cui JOIN si può anche scrivere INNER JOIN Il predicato a.codice_proponente=d.codice_proponente è detto predicato di join, in quanto stabilisce il criterio con cui le tuple di T_DOMANDE e di T_AUTENTICAZIONI devono essere combinate

LEFT JOIN Supponiamo di avere le tabelle: T_CODICI_MISURA T_FONDI CODICE DESCRIZIONE CODICE FONDO 1 Lavoro Autonomo 1 30000 2 Microimpresa 3 4745 3 Franchising 4 0 Se voglio tutti I codici misura (anche quelle senza fondo): SELECT a.codice, a.descrizione, b.fondo FROM T_CODICI_MISURA a LEFT [OUTER] JOIN T_FONDI b ON a.codice=b.codice CODICE DESCRIZIONE FONDO 1 Lavoro Autonomo 30000 2 Microimpresa NULL 3 Franchising 4745

LEFT JOIN con clausola WHERE Supponiamo di avere le tabelle: T_CODICI_MISURA T_FONDI CODICE DESCRIZIONE CODICE FONDO 1 Lavoro Autonomo 1 30000 2 Microimpresa 3 4745 3 Franchising 4 0 Se voglio solo i codici misura senza un fondo corrispondente: SELECT a.codice, a.descrizione, b.fondo FROM T_CODICI_MISURA a LEFT [OUTER] JOIN T_FONDI b ON a.codice=b.codice WHERE b.codice is null CODICE DESCRIZIONE FONDO 2 Microimpresa NULL

FULL JOIN Supponiamo di avere le tabelle: T_CODICI_MISURA T_FONDI CODICE DESCRIZIONE CODICE FONDO 1 Lavoro Autonomo 1 30000 2 Microimpresa 3 4745 3 Franchising 4 0 Se voglio tutti gli incroci: SELECT a.codice as A_COD, b. CODICE as B_COD, a.descrizione, b.fondo FROM T_CODICI_MISURA a FULL [OUTER] JOIN T_FONDI b ON a.codice=b.codice A_COD B_COD DESCRIZIONE FONDO 1 1 Lavoro Autonomo 30000 2 NULL Microimpresa NULL 3 3 Franchising 4745 NULL 4 NULL 0

FULL JOIN con clausola WHERE Supponiamo di avere le tabelle: T_CODICI_MISURA T_FONDI CODICE DESCRIZIONE CODICE FONDO 1 Lavoro Autonomo 1 30000 2 Microimpresa 3 4745 3 Franchising 4 0 Se voglio il risultato complementare della inner join: SELECT a.codice as A_COD, B.CODICE as B_COD, a.descrizione, b.fondo FROM T_CODICI_MISURA a FULL [OUTER] JOIN T_FONDI b ON a.codice=b.codice WHERE a.codice IS NULL or b.codice IS NULL A_COD B_COD DESCRIZIONE FONDO 2 NULL Microimpresa NULL NULL 4 NULL 0

Subquery flat si basano sul risultato di altre interrogazioni (subquery, o query innestate o query nidificate) SELECT * FROM T_AUTENTICAZIONI WHERE CODICE_PROPONENTE IN (SELECT CODICE_PROPONENTE FROM T_DOMANDE WHERE MISURA=2) CODICE_ PROPONENTE CODICE_FISCALE COGNOME NOME DATA_ REGISTRAZIONE SESSO TITOLO_ STUDIO 88115 BNLBRB79J12G499K BONOLI BARBARA 20/01/2007 F 3 88122 GDNMTT78A12AD54L GHEDINI MATTEO 12/04/2006 M 3 Equivalente a: SELECT * FROM T_AUTENTICAZIONI WHERE CODICE_PROPONENTE IN ('88115', '88122')

Subquery vs. JOIN Quando possibile è bene usare JOIN al posto di query innestate: SELECT * FROM T_AUTENTICAZIONI WHERE CODICE_PROPONENTE IN ( SELECT CODICE_PROPONENTE FROM T_DOMANDE WHERE MISURA=2 ) Equivalente a: SELECT DISTINCT a.* FROM T_AUTENTICAZIONI a JOIN T_DOMANDE d ON a.codice_proponente=d.codice_proponente WHERE MISURA=2 Si noti la presenza del DISTINCT può risultare più semplice da derivare

Operatori Insiemistici differenza di tabelle Ciò che si può fare è combinare in modo opportuno i risultati di due istruzioni SELECT, mediante gli operatori UNION, INTERSECT, EXCEPT In tutti i casi gli elementi delle SELECT list devono avere tipi compatibili e gli Il risultato è in ogni caso privo di duplicati, per mantenerli occorre UNION ALL, INTERSECT ALL, EXCEPT ALL

INSERT: caso singolo È possibile inserire una nuova tupla specificandone i valori INSERT INTO T_AUTENTICAZIONI(CODICE_PROPONENTE, CODICE_FISCALE, COGNOM, NOME, DATA_REGISTRAZIONE, SESSO, TITOLO_STUDIO) VALUES ('88110', 'SCVNDR79B23G479H', 'SCAVOLINI', 'ANDREA', '24/01/2007', 'M', 6) Ci deve essere corrispondenza tra attributi e valori sono stati definiti Se la lista non include tutti gli attributi, i restanti assumono valore NULL (se ammesso) o il valore di default (se specificato) INSERT INTO T_AUTENTICAZIONI(CODICE_PROPONENTE, CODICE_FISCALE, COGNOM, NOME) VALUES ('88110', 'SCVNDR79B23G479H', 'SCAVOLINI', 'ANDREA')

INSERT: caso multiplo È possibile anche inserire le tuple che risultano da una query INSERT INTO SediBologna (SedeBO,Resp) SELECT Sede, Responsabile FROM Sedi WHERE Citta = 'Bologna' Valgono ancora le regole viste per il caso singolo Gli schemi del risultato e della tabella in cui si inseriscono le tuple possono tipi delle colonne siano compatibili

UPDATE UPDATE modifica i dati esistenti in una tabella. Può fare uso di una condizione per specificare le tuple da modificare e di espressioni per determinare i nuovi valori: UPDATE <nome tabella> SET <colonne o variabili da aggiornare> WHERE <condizioni delle righe da aggiornare> Se non viene specificata una clausola WHERE, verranno aggiornate tutte le righe della tabella La condizione di ricerca della clausola WHERE viene valutata per ogni riga della tabella prima dell'aggiornamento di qualsiasi riga Se un aggiornamento di una riga viola un vincolo, una regola o l'impostazione Null per la colonna oppure il nuovo valore è incompatibile con il tipo di dati, viene annullata l'istruzione, viene restituito un errore e non viene aggiornato alcun record. ES: UPDATE T_AUTENTICAZIONI SET NOME = 'Baby' WHERE COGNOME = 'Bonoli'

Il linguaggio SQL Raggruppamenti

Raggruppamenti Quanto sinora visto permette di estrarre dal DB informazioni che si riferiscono a singole tuple (eventualmente ottenute mediante operazioni di join) In molti casi è viceversa utile ottenere dal DB informazioni (di sintesi) che A tale scopo SQL mette a disposizione due strumenti di base: Funzioni aggregate Clausola di raggruppamento: GROUP BY

Funzioni Aggregate Lo standard SQL mette a disposizione una serie di funzioni aggregate MIN minimo MAX massimo SUM somma AVG media aritmetica STDEV deviazione standard VARIANCE varianza COUNT contatore Es: SELECT SUM(MUTUO_AMMESSO) AS MUTUO_AMMESSO_TOTALE FROM T_DATI_AMMISSIONE MUTUO_AMMESSO_TOTALE 36576,35 Tutte le funzioni, ad eccezione di COUNT, ignorano i valori nulli Il risultato è NULL se tutti i valori sono NULL DISTINCT considera solo i valori distinti

Funzioni aggregate e Raggruppamento I valori di sintesi calcolati dalle funzioni aggregate si riferiscono a tutte le tuple che soddisfano le condizioni delle clausola WHERE In molti casi è viceversa opportuno fornire tali valori per gruppi omogenei di tuple (es: le domande di una stessa misura) La clausola GROUP BY serve a definire tali gruppi, specificando una o più colonne (di raggruppamento) sulla base della/e quale/i le tuple sono raggruppate per valori uguali SELECT DATA_DELIBERA, SUM(MUTUO_AMMESSO) AS MUTUO_AMMESSO_TOTALE FROM T_DATI_AMMISSIONE WHERE DATA_REVOCA IS NULL GROUP BY DATA_DELIBERA DATA_ DELIBERA MUTUO_ AMMESSO_ TOTALE 09/09/2007 15436,79 03/03/2007 21139,56

GROUP BY: spiegazione 1. Si considerano solo le tuple che soddisfano la clausola WHERE: WHERE DATA_REVOCA IS NULL PROTOCOLLO INVESTIMENTO_AM MESSO GESTIONE_A MMESSO DATA_ DELIBERA CAPITALE_A MMESSO MUTUO_ AMMESSO DATA_REVOCA 2344633 25709,01 5164,57 09/09/2007 10272,22 15436,79 NULL 2344635 24950 5164,57 03/03/2007 9892,72 15057,28 NULL 2344639 7000 5164,57 03/03/2007 917,72 6082,28 29/12/2007 2344640 9500 5164,57 03/03/2007 9892,72 6087,28 NULL PROTOCOLLO INVESTIMENTO_AM MESSO GESTIONE_A MMESSO DATA_ DELIBERA CAPITALE_A MMESSO MUTUO_ AMMESSO DATA_REVOCA 2344633 25709,01 5164,57 09/09/2007 10272,22 15436,79 NULL 2344635 24950 5164,57 03/03/2007 9892,72 15057,28 NULL 2344640 9500 5164,57 03/03/2007 9892,72 6087,28 NULL

GROUP BY: spiegazione 2. Si raggruppano le tuple per valori uguali della/e colonna/e presenti nella clausola GROUP GROUP BY DATA_DELIBERA PROTOCOLLO INVESTIMENTO_AM MESSO GESTIONE_A MMESSO DATA_ DELIBERA CAPITALE_A MMESSO MUTUO_ AMMESSO DATA_REVOCA 2344633 25709,01 5164,57 09/09/2007 10272,22 15436,79 NULL 2344635 24950 5164,57 03/03/2007 9892,72 15057,28 NULL 2344640 9500 5164,57 03/03/2007 9892,72 6087,28 NULL 3. infine a ciascun gruppo si applica la funzione aggregata SELECT DATA_DELIBERA, SUM(MUTUO_AMMESSO) AS MUTUO_AMMESSO_TOTALE DATA_ DELIBERA MUTUO_ AMMESSO_TO TALE 09/09/2007 15436,79 03/03/2007 21144,56

Raggruppamento e DISTINCT Quando la SELECT list include solo le colonne di raggruppamento, il tutto è equivalente a ciò T_AUTENTICAZIONI CODICE_ PROPONENTE CODICE_FISCALE COGNOME NOME DATA_ REGISTRAZIONE SESSO TITOLO_ STUDIO 88114 SCVNDR79B23G479H SCAVOLINI ANDREA 24/01/2007 M 6 88115 BNLBRB79J12G499K BONOLI BARBARA 20/01/2007 F 3 88122 GDNMTT78A12AD54L GHEDINI MATTEO 12/04/2006 M 3 SELECT TITOLO_STUDIO FROM T_AUTENTICAZIONI GROUP BY TITOLO_STUDIO TITOLO_ STUDIO SELECT DISTINCT TITOLO_STUDIO FROM T_AUTENTICAZIONI 3 6

Condizioni sui gruppi Oltre a poter formare dei gruppi, è anche possibile selezionare dei gruppi sulla base di loro SELECT DATA_DELIBERA, SUM(MUTUO_AMMESSO) AS MUTUO_AMMESSO_TOTALE FROM T_DATI_AMMISSIONE WHERE DATA_REVOCA IS NULL GROUP BY DATA_DELIBERA HAVING COUNT(*)>1 PROTOCOLLO INVESTIMENTO_A MMESSO GESTIONE_ AMMESSO DATA_ DELIBERA CAPITALE_ AMMESSO MUTUO_ AMMESSO DATA_REVOCA COUNT(*)=1 COUNT(*)=2 2344633 25709,01 5164,57 09/09/2007 10272,22 15436,79 NULL 2344635 24950 5164,57 03/03/2007 9892,72 15057,28 NULL 2344640 9500 5164,57 03/03/2007 9892,72 6087,28 NULL DATA_ DELIBERA MUTUO_ AMMESSO_TOTALE La clausola HAVING ha per i gruppi una funzione simile a quella che la clausola WHERE ha per le tuple (attenzione a non confonderle!) 03/03/2007 21144,56

GROUP BY: osservazioni NB: in una query con GROUP BY le clausole SELECT e HAVING possono contenere solo: Funzioni aggregate Attributi di aggregazione (gli attributi su cui si raggruppa il risultato) Se si volessero selezionare altri attributi le alternative sono quindi: Aggregare quegli attributi con una funzione aggrata Aggiungere quegli attributi (ridondanti) nella clausola GROUP BY Esempio: voglio selezionare anche il dettaglio di GESTIONE_AMMESSO che so essere lo stesso per le domande deliberate nello stesso giorno. SELECT DATA_DELIBERA, MAX(GESTIONE_AMMESSO), SUM(MUTUO_AMMESSO) FROM T_DATI_AMMISSIONE WHERE DATA_REVOCA IS NULL GROUP BY DATA_DELIBERA SELECT DATA_DELIBERA, GESTIONE_AMMESSO, SUM(MUTUO_AMMESSO) FROM T_DATI_AMMISSIONE WHERE DATA_REVOCA IS NULL GROUP BY DATA_DELIBERA, GESTIONE_AMMESSO

GROUP BY: esempi Totale Gestione ammesso per stato della domanda: SELECT CODICE_STATO, SUM(GESTIONE_AMMESSO) FROM T_DATI_AMMISSIONE a JOIN T_DOMANDE d ON a.protocollo=d.protocollo GROUP BY CODICE_STATO Totale Gestione ammesso per data ricezione: SELECT DATA_RICEZIONE, SUM(GESTIONE_AMMESSO) FROM T_DATI_AMMISSIONE a JOIN T_DOMANDE d ON a.protocollo=d.protocollo GROUP BY DATA_RICEZIONE Totale Gestione ammesso per stato della domanda e data ricezione: SELECT CODICE_STATO, DATA_RICEZIONE, SUM(GESTIONE_AMMESSO) FROM T_DATI_AMMISSIONE a JOIN T_DOMANDE d ON a.protocollo=d.protocollo GROUP BY CODICE_STATO, DATA_RICEZIONE

Il linguaggio SQL FUNZIONI

Funzione ISNULL ISNULL: Sostituisce a NULL un determinato valore di sostituzione specificato. ISNULL ( <espressione da sostituire se NULL>, <valore di sostituzione> ) sostituire se NULL. ES: Data la seguente tabella T_DATI_AMMISSIONE PROTOCOLLO INVESTIMENTO_ AMMESSO GESTIONE_ AMMESSO DATA_ DELIBERA CAPITALE_ AMMESSO MUTUO_ AMMESSO DATA_REVOCA 2344633 25709,01 5164,57 09/09/2007 10272,22 15436,79 2344635 24950 5164,57 03/03/2007 9892,72 15057,28 2344639 7000 5164,57 03/03/2007 917,72 6082,28 29/12/2007 SELECT PROTOCOLLO, ISNULL(DATA_REVOCA, ) DATA_REVOCA FROM T_DATI_AMMISSIONE PROTOCOLLO DATA_REVOCA 2344633 31/12/9999 2344635 31/12/9999 2344639 29/12/2007

Funzioni CAST e CONVERT Consentono di convertire un'espressione da un tipo di dati a un altro. CAST: CAST ( <espressione> AS <tipo>) CONVERT: CONVERT ( <tipo>, <espressione>,<stile>) Espressione: qualsiasi espressione valida Tipo: tipo di dati verso cui si vuole effettuare la conversione Stile ESEMPIO: Supponiamo di avere un campo di tipo CHAR in cui vengono inseriti i pesi in kilogrammi dei pazienti di una clinica e che vogliamo effettuare la media di questi valori. Essendo un valore CHAR non sarà possibile effettuare questo tipo di operazione. NOME (char) PESO_KG (char) ANDREA 85 Occorre convertire il tipo di dato numerico BARBARA 60

Utilizzo di CAST e CONVERT Utilizziamo la funzione CAST per convertire il tipo di dato da CHAR a NUMERIC CAST ( PESO_KG as NUMERIC) Utilizziamo la funzione CONVERT per convertire il tipo di dato da CHAR a NUMERIC CONVERT (NUMERIC, PESO_KG) Inserendo uno dei due codici nella query utilizzata per elaborare le informazioni relative al peso dei pazienti sarà possibile trattare il campo PESO_KG come fosse un valore numerico

Utilizzo CONVERT per valori Datetime stile questa viene utilizzata, ad esempio, per convertire i dati di tipo Datetime in stringhe di formati diversi. Stile Standard Formato 101 U.S. mm/gg/aaaa 105 Italiano gg- mm- aa 112 ISO Aaaammgg Es: Convertiamo il valore DATA della seguente tabella ORDINI nei vari formati: SELECT DATA, CONVERT (char,data,112) conv1 CONVERT (char,data,101) conv2 CONVERT (char,data,105) conv3 FROM ORDINI ORDINE (char) DATA (datetime) P11 02/12/2007 12:00:00 AM P32 04/06/2012 12:00:00 AM DATA (datetime) conv1 conv2 conv3 02/12/2007 12:00:00 AM 20070212 02/12/2007 12-02-2007 04/06/2012 12:00:00 AM 20120406 04/06/2012 06-04-2012

Conversioni Implicite e Esplicite Le conversioni implicite sono conversioni eseguite senza specificare la funzione CAST o CONVERT Le conversioni esplicite sono conversioni per cui è necessario specificare la funzione CAST o CONVERT Nella figura seguente vengono illustrate le principali conversioni di tipi di dati esplicite e implicite per i tipi di dati di sistema di SQL Server 2005. DA: A: char varchar datetime numeric float real int char I I I I I I varchar I I I I I I datetime I I E E E E numeric I I I X I I I float I I I I I I real I I I I I I int I I I I I I I E X Conversione implicita Conversione esplicita conversione implicita

Funzioni sulle stringhe LEFT e RIGHT: SELECT RIGHT('Primo',2); SELECT LEFT('Primo',2); LTRIM e RTRIM: eliminano gli spazi a sinistra o a destra SELECT LTRIM(' Primo '); SELECT RTRIM(' Primo '); UPPER e LOWER: consentono di trasformare una stringa, rispettivamente, in tutta maiuscola o tutta minuscola SELECT UPPER ('Primo'); SELECT LOWER('Primo');

Funzioni sulle stringhe REPLACE: Sostituisce tutte le occorrenze di un valore stringa specificato con un altro valore stringa REPLACE ( <espressione>, <stringa da trovare>, <rimpiazzo> ) espressione: stringa in cui eseguire la ricerca stringa da trovare: sottostringa da individuare rimpiazzo: stringa di sostituzione ES: SELECT REPLACE('abcdefghicde','cde','xxx'); abxxxfghixxx NB: Restituisce nvarchar se uno degli argomenti di input è di tipo nvarchar. In caso contrario REPLACE restituisce varchar.

Funzioni sulle stringhe CHARINDEX: iniziale se la trova. CHARINDEX ( <espressione1>, <espressione2>, <start>) espressione1: espressione di caratteri che contiene la sequenza da cercare espressione2: espressione di caratteri da cercare start: valore dal quale inizia la ricerca. Se viene omesso o è negativo o è uguale a zero, la ricerca 6

Funzioni sulle stringhe SUBSTRING: restituisce una parte della stringa, a partire dal carattere specificato fino alla fine della stringa o, se indicato, per un certo numero di caratteri. SUBSTRING ( <espressione>, <start>, <lunghezza>) espressione: stringa ES: SELECT SUBSTRING('Primo',2,3); OSSERVAZIONI: lunghezza zero.