linguaggio sql: ddl1 breve presentazione curata da aldo pappalepore

64
linguaggio sql: DDL 1 breve presentazione curata da Aldo Pappalepore

Upload: ezio-valente

Post on 02-May-2015

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 1

breve presentazione curata da

Aldo Pappalepore

Page 2: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 2

I comandi del linguaggio SQL si dividono nei seguenti sottoinsiemi:

- D M L Data Manipulation Language- D D L Data Description Language- D C L Data Control Language Il Data Description Language e’ quella parte del linguaggio SQL, che contiene tutti i comandi per la definizione di un database.Analizzeremo in questa fase i principali comandi che ci permetteranno di costruire un database.

Page 3: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 3

Per descrivere il formato dei comandi verranno utiliz-zati i seguenti simboli:<> delimitano i nomi degli elementi del linguaggio;[ ] denotano un elememnto opzionale;… indicano che l’elem. prec. può essere ripetuto;{ } raggruppano più elementi di una definizione;a|b indica che gli elementi a e b sono in alternativa. Le parole chiave verranno scritte in maiuscolo.Un comando SQL è normalmente costituito da una operazione seguita da una o più clausole che la specificano.

Page 4: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 4

Il comando CREATE SCHEMA, si limita a creare una cartella col nome specificato nel comando.La sintassi e’ la seguente :

CREATE SCHEMA <nome_schema>

Vedi esempio 1

Page 5: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 5

La tabella e’ la struttura dati fondamentale di Sql; essa si caratterizza come un insieme di record (righe), ciascuno dei quali contiene un certo numero di campi (colonne).La sua sintassi e’ la seguente:

CREATE TABLE <nome tabella>(Nome CHAR(15),Cognome CHAR(20))

Una tabella deve avere almeno un campo.

Vedi esempio 2

Page 6: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 6

Nella sintassi della creazione di una tabella la definizione di una colonna ha il seguente formato:<nome colonna> <tipo dati>[<clausola_default>][<definizione_vincolo_di_colonna>]La <clausola di_default> specifica opzionalmente, facendolo precedere dalla parola chiave DEFAULT, il valore di default da assegnare agli elementi della colonna; possono essere delle costanti o delle espressioni dello stesso tipo della colonna cui si riferiscono.Gli altri tre elementi che compongono la definizione della colonna sono il nome, il tipo dei dati e i vincoli di integrita’

Page 7: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 7

Numeric,Decimal,Integer e Smallint sono anche definiti ‘Tipi numerici esatti’ e rappresentano i numeri decimali positivi e negativi con o senza la virgola.

Float,Real e Double sono anche definiti ‘Tipi Numerici Approssimati’ o Floating Point (Virgola Mobile) e implementano, nei limiti della precisione ottenibile, i numeri reali.

Page 8: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 8

I principali tipi di dati supportati dal linguaggio SQL, sono i seguenti:- CHARACTER- NUMERIC- DECIMAL- INTEGER- SMALLINT- FLOAT- REAL- DOUBLE PRECISION- DATE

Page 9: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 9

La sintassi e’:CHARACTER [VARYNG] [<lunghezza>]Il tipo CHARACTER, puo’ essere di lunghezza fissa o variabile; nel primo caso il numero dei caratteri e’ sempre uguale al numero definito da <lunghezza>, nel secondo caso, specificato mediante l’opzione VARYNG, il numero di caratteri di ciascun valore inserito puo’ variare da zero fino a un numero massimo di caratteri pari a <lunghezza>.Una lunghezza non definita e’ per default uguale a 1.CHARACTERCHARACTER(20)CHARACTER VARYNG (100)CHARACTER puo’ essere abbreviato con CHAR e CHARACTER VARYNG con VARCHAR.

Page 10: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 10

Sintassi :NUMERIC [(<precisione> [,<scala>])]DECIMAL [(<precisione> [,<scala>])]INTEGERSMALLINTLa parola chiave INTEGER puo’ essere abbreviata con INT, la parola chiave DECIMAL con DEC.La <precisione> nei tipi NUMERIC e DECIMAL, indica il numero massimo di cifre,comprendendo quelle a destra e a sinistra della virgola escluso il segno; la <scala> specifica il numero di cifre a destra della virgola. La precisione deve essere maggiore o uguale a 1, la scala maggiore o uguale a 0.INTEGER e SMALLINT sono tipi numerici esatti con scala uguale a 0, cioe’ senza virgola.Spesso NUMERIC e DECIMAL sono sinonimi.

Vedi esempio 3

Page 11: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 11

La rappresentazione dei numerici approssimati avviene tramite le due componenti mantissa ed esponente:mEn e’ la sua rappresentazione;m*10 n è il suo valore.La mantissa puo’ essere un numero decimale positivo o negativo con o senza virgola, l’esponente e’ un numero intero positivo o negativo. Sintassi :FLOAT [(<precisione>)]REALDOUBLE PRECISIONNel tipo Float la precisione si riferisce alla lunghezza massima della mantissa

Page 12: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 12

Esempi di specifica di tipi numerici approssimati sono:FLOAT(20)REALFLOATEsempi di costanti di tipo numerico approssimato sono:150E5+18E3-18E3-25E-10-23.5E4

Page 13: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 13

Il tipo DATE nel linguaggio SQL rappresenta le date come sequenze di tre valori, riferiti all’anno, al mese, al giorno.Le costanti di tipo DATE sono espresse nel seguente formato:DATE ‘AAAA-MM-GG’Esempio:DATE ‘2002-06-21’La funzione Current_date, senza parametri, restituisce la data corrente, derivandola dalla data del sistema.

Page 14: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 14

La definizione di vincoli di integrita’ consente di limitare i valori ammissibili per una determinata colonna della tabella in base a specifici criteri.I vincoli d’integrita’ forniscono forme di controllo che si riferiscono non solo al singolo valore da inserire, ma anche alle relazioni di tale valore con altri valori all’interno della stessa colonna della tabella e con colonne di altre tabelle.La sintassi del vincolo di integrita’ di colonna e’ la seguente:<vincolo_di_colonna> ::=[CONSTRAINT <nome_vincolo>]{<vincolo_NOT_NULL> |<vincolo_di_univocita’> |<vincolo_di_chiave_esterna> |<vincolo_di_controllo>}[<attributi_del_vincolo>]

Page 15: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 15

La specifica [CONSTRAINT <nome_vincolo>] e’ opzionale, dare un nome al vincolo puo’ essere utile per individuare, durante una operazione di DML, quale vincolo e’ stato violato.

{<vincolo_NOT_NULL> | <vincolo_di_univocita’> |<vincolo_di_chiave_esterna> | <vincolo_di_controllo>} sono i possibili tipi di vincoli.

Le opzioni <attributi del vincolo> si riferiscono alla modalita’ di applicazione del vincolo.

Page 16: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 16

Sintassi:<vincolo_not_null> ::= NOT NULLTale vincolo stabilisce che la colonna NON puo’ contenere valori nulli: i valori della colonna sono obbligatori.Per esempio nella creazione della tabella Veicoli, volendo specificare che il codice modello del veicolo e’ un dato obbligatorio, scriveremo:CREATE TABLE Veicoli(…Cod_Modello CHARACTER (3) NOT NULL,…)Oppure dando il nome V_Cod_Modello al vincolo:Cod_Modello CHARACTER (3)CONSTRAINT V_Cod_Modello NOT NULL, Vedi esempio 4

Page 17: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 17

Ci sono due vincoli di unicita’: UNIQUE e PRIMARY KEYLa sintassi e’:<vincolo_UNIQUE> ::= UNIQUE<vincolo_PRIMARY_KEY> ::= PRIMARY KEYAd esempio se volessimo specificare che i nomi dei modelli sono unici, scriveremo:CREATE TABLE Modelli(…Nome_Modello CHARACTER (30) UNIQUE,…)Il vincolo UNIQUE permette l’esistenza di piu’ valori NULL della o delle colonne specificate.

Vedi esempio 5

Page 18: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 18

PRIMARY KEY e’ invece una combinazione dei vincoli UNIQUE e NOT NULL e serve a specificare la chiave primaria in una tabella, essa e’ unica per ogni tabella.

Nel caso in cui la chiave PRIMARY KEY sia composta da una sola colonna, il vincolo puo’ essere specificato come vincolo di colonna:

CREATE TABLE Veicoli(Targa CHAR (10) PRIMARY KEY ,……)

Vedi esempio 6

Page 19: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 19

Nel caso in cui la chiave PRIMARY KEY sia composta da piu’ colonne, il vincolo puo’ essere specificato solo come vincolo di tabella:

CREATE TABLE Proprieta’(Targa CHAR (10),Cod_Proprietario CHAR (5),…PRIMARY KEY (Targa, Cod_Proprietario),…)

Vedi esempio 7

Page 20: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 20

Date due Tabelle T1 e T2 che rappresentino insiemi di entita’ legati da una relazione, il vincolo di chiave esterna rappresenta in maniera esplicita il fatto che un attributo di T1 e’ utilizzato come chiave esterna legata alla chiave primaria della tabella T2. Si crea quindi un vincolo di integrita’ referenziale, il quale impone che ad ogni valore non nullo della tabella T1 corrisponde uno e un solo valore nella tabella T2.T1 e’ detta tabella referente e T2 tabella riferita.La sintassi e’ la seguente:<vincolo_di_chiave_esterna_di_colonna> ::=REFERENCES <tabella_riferita>[<colonna_riferita>[{,<colonna_riferita>}…][MATCH {FULL ! PARTIAL}][<azione_innescata>]

Page 21: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 21

Per esempio nella tabella Veicoli (T1) la colonna Cod_Categoria è chiave esterna legata alla colonna Cod_Categoria della tabella Cate-gorie (T2): si specifica così che ogni veicolo appartiene ad una cate-goria e che questa è unica per quel veicolo.

Targa

Cod_Modello

Cod_Categoria

CilindrataCombustibileCavalli_FiscaliVelocitàPostiImmatricolazione

Veicolo (T1)

1 NCategorie (T2)

Cod_Categoria

Nome_Categoria

Page 22: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 22

La sintassi del vincolo di chiave esterna, quando specificato come vincolo di colonna, è la seguente:

CREATE TABLE Veicoli(…Cod_Categoria CHARACTER(2) REFERENCESCategorie (Cod_Categoria),…)

.

Vedi esempio 8

Page 23: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 23

È possibile utilizzare anche un vincolo di tabella ad esempio:

CREATE TABLE Veicoli(…Cod_Categoria CHARACTER(2),…FOREIGN KEY(Cod_Categoria) REFERENCESCategorie(Cod_Categoria),…)Le clausole MATCH PARTIAL e MATCH FULL sono alternative; la seconda specifica un’ulteriore condizione di vincolo,imponendo che i valori delle colonne referenti siano tutti NULL o contengano tutti valori non nulli.

Page 24: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 24

La <azione_innescata>,che indica al DBMS l’azione da intraprende-re qualora venga violata una delle condizioni del vincolo di chiave esterna in seguito a una operazione di aggiornamento o di cancella-zione, ha la seguente sintassi:

<azione_innescata> ::=ON UPDATE [{<azione}] [ON DELETE [{<azione}]] | ON DELETE[{<azione}] [ON UPDATE [{<azione}]]dove <azione> è così definita:

<azione> ::=CASCADE | SET NULL | SET DEFAULT | NO ACTIONPuò essere specificata prima la clausola ON UPDATE e poi la clausola ON DELETE o viceversa.

Page 25: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 25

Nel caso ON DELETE l’azione, che viene attivata dalla cancella-zione di righe nella tabella riferita, è eseguita sulle righe corri-spondenti della tabella referente e ha il seguente effetto:

CASCADE le righe della tabella referente vengono anch’esse cancellateSET NULL i valori della colonna referente vengono imposti a NULLSET DEFAULT i valori nella colonna referente vengono impostati al valore di default definito per la colonnaNO ACTION il sistema non innesca alcuna azione speciale: questo è il valore di default

Page 26: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 26

Nel caso ON UPDATE l’azione, che viene attivata dall’aggiorna-mento di righe nella tabella riferita, è eseguita sulle righe corri-spondenti della tabella referente e ha il seguente effetto:

CASCADEi valori nella colonna referente vengono impostati agli stessi valori assegnati alla colonna riferitaSET NULL i valori della colonna referente vengono imposti a NULLSET DEFAULT i valori nella colonna referente vengono impostati al valore di default definito per la colonnaNO ACTION il sistema non innesca alcuna azione speciale: questo è il valore di defaultVedi esempio 9

Page 27: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 27

Il vincolo di controllo è utilizzato per verificare generiche condizioni sui valori di una colonna.La sintassi è la seguente:

<vincolo_di_controllo>::= CHECK(<condizione>)in cui <condizione> viene espressa con gli operatori di confronto, i connettori logici, gli operatori BETWEEN, IN e LIKE dove:

Operatori di confronto: = < > <= >= <>Connettori logici: AND OR NOTBetween: <argomento> between <valore1> AND <valore2> In: <argomento> in (‘valore1’,’valore2’,’valore3’)Like: <argomento> like ‘al_3b%’ dove _ indica un carattere qualsiasi e % una sequenza di caratteri qualsiasi

Page 28: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 28

Ad esempio:CREATE TABLE Veicoli(…Cilindrata NUMERIC (4) CHECK (Cilindrata < 3000),…)

Oppure:CREATE TABLE Veicoli(…Cilindrata NUMERIC (4) CHECK (Cilindrata between 1500 and 3000),…)

Vedi esempio 9bis

Page 29: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 29

Tramite il comando DROP SCHEMA viene eliminato uno schema logico, cioè vengono cancellate tutte le definizioni in esso contenute e i dati corrispondenti; tale azione è definitiva e lo schema non sarà più accessibile.La sintassi è:DROP SCHEMA <nome_schema> {RESTRICT | CASCADE}Le opzioni RESTRICT e CASCADE sono alternative ed è obbligatorio specificare l’una o l’altra: con RESTRICT lo schema viene eliminato solo se vuoto, con CASCADE in ogni caso.Ad esempio:DROP SCHEMA Registro_Automobilistico RESTRICTnon ha effetto se il database non è vuotoDROP SCHEMA Registro_Automobilistico CASCADEvengono cancellati sia i dati sia le definizioni del database Regi-stro_Automobilistico

Vedi esempio 10

Page 30: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 30

Il comando DROP TABLE elimina la definizione e il contenuto di una tabella. La sintassi è:DROP TABLE <nome_tabella> {RESTRICT | CASCADE}Le opzioni RESTRICT e CASCADE sono alternative ed è obbligatorio specificare l’una o l’altra. Specificando la prima opzione la tabella viene eliminata solo se non è utilizzata nella definizione di altri oggetti dello schema. Nel caso in cui la colonna, ad esempio Cod_Categoria, sia usata in un vincolo di chiave esterna della tabella Veicoli, il comando

DROP TABLE Categorie RESTRICT

fallisce

Page 31: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 31

Quando usiamo CASCADE invece, oltre ad essere eliminata la tabella specifica, vengono eliminate tutte le dipendenze di tale tabella nelle altre definizioni dello schema.

Ad esempio:

DROP TABLE Categorie CASCADE

ha l’effetto di eliminare la definizione e i dati della tabella Categorie, nonché l’eventuale definizione del vincolo di chiave esterna nella tabella Veicoli.

Vedi esempio 11

Page 32: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 32

La modifica di una tabella in SQL viene realizzata con il comando ALTER TABLE.Tale comando permette di modificare alcune delle caratteristiche di una tabella; in particolare è possibile aggiungere ed eliminare colon-ne, aggiungere ed eliminare vincoli di tabella, assegnare ed eliminare valori di default.Il comando ha forme sintattiche diverse per ciascuna funzione svolta.

La forma:ALTER TABLE <nome_tabella>ADD [column] <definizione_di_colonna>permette di aggiungere una nuova colonna a una tabella, la colonna aggiunta risulterà l’ultima nella numerazione delle colonne.

Page 33: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 33

La forma:ALTER TABLE <nome_tabella>DROP [column] <nome_colonna>{RESTRICT | CASCADE}permette di eliminare la definizione e i dati di una colonna da una tabella.

Le opzioni RESTRICT e CASCADE sono alternative ed è obbligatorio specificare o l’una o l’altra; per il loro significato fare riferimento ai comandi precedenti.

Vedi esempio 12

Page 34: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 34

La forma:ALTER TABLE <nome_tabella> ADD <vincolo_di_tabella>permette di aggiungere un nuovo vincolo di tabella a quelli già esistenti.

Per aggiungere alla tabella Veicoli la verifica che la cilindrata sia inferiore a 3000 scriveremo:

ALTER TABLE VeicoliADD CONSTRAINT Controlla_CilindrataCHECK (Cilindrata < 3000)

Vedi esempio 13

Page 35: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DDL 35

La forma:ALTER TABLE <nome_tabella>ALTER [COLUNM] <nome_colonna>SET <clausola_default>permette di aggiungere l’assegnazione di un valore di default a una colonna. Per esempio, per aggiungere il valore di default 0 alla colonna Cilindrata scriveremo:ALTER TABLE Veicoli ALTER CilindrataSET DEFAULT 0

infine la forma:ALTER TABLE <nome_tabella>ALTER [COLUNM] <nome_colonna> DROP DEFAULTpermette di eliminare il valore di default per una colonna,ad esempio:ALTER TABLE Veicoli ALTER Cilindrata DROP DEFAULT

Vedi esempio 14

Page 36: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 36

Il DML (Data Manipulation Language), è il sottinsieme dei comandi del linguaggio SQL per le operazioni di interrogazione, e di aggior-namento dei dati, quali inserimento,modifica, cancellazione.

Nelle prossime slide, ci occuperemo dell’aspetto aggiornamento dei dati di un database.

Vedremo i comandi che consentono di inserire nuovi dati in una tabella precedentemente definita, di modificare i dati contenuti in una tabella e di effettuarne la cancellazione.

Page 37: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 37

Il comando INSERT è utilizzato per l’inserimento dei dati in una tabella. La sua sintassi è:

<comando insert> ::= INSERT INTO <nome_tabella>[(lista_di_colonne)] <origine>

dove: <nome_tabella> identifica la tabella di destinazione <lista_di_colonne> identifica tutte o alcune colonne in cui i dati vanno inserirti <origine> identifica i valori o la tabella di provenienza dei dati da inserire

Page 38: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 38

Nel caso in cui i valori da inserire vengono indicati esplicitamente <origine> ::= VALUES <lista_di_valori>Come nell’esempio:

INSERT INTO VeicoliVALUES (‘A123456X’,’01’,’85’,’195’,’5’, DATE ’1998-12-30’,’1796’,’004’,’01’)

I valori elencati devono rispettare l’ordine che le colonne presentano nella tabella e corrispondere ai tipi di dato in esse specificate.

Vedi esempio 15

Page 39: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 39

Nel caso in cui i valori da inserire sono contenuti in una tabella questa deve avere la stessa struttura della tabella di destinazione (ordine e domini delle colonne)Per inserire allora i dati contenuti in Veicoli1 nella tabella Veicoli la prima tabella deve avere la stessa struttura della seconda ed il coman-do sarà:

INSERT INTO VeicoliSELECT *FROM Veicoli1{WHERE Cilindrata not null}

Tutte {solo quelle con cilindrata non nulla} le righe della tabella Veicoli1 vengono così aggiunte alla tabella Veicoli

Page 40: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 40

Se la <lista_di_colonne> manca viene considerata composta da tutte le colonne della tabella; va invece sempre utilizzata quando <origine> specifica almeno una delle seguenti condizioni:• non specifica tutte le colonne della tabella di destinazione• specifica le colonne in ordine diverso da cole le stesse si trovano nella tabella

INSERT INTO Veicoli(Targa, Cod_Modello)VALUES (‘D238765W’,’002’)

le colonne non inserite vengono poste a null e quindi devono ammet-tere tale valore: vanno quindi sempre specificate le colonne che costi-tuiscono la chiave primaria Vedi esempio

16

Page 41: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 41

Il comando UPDATE è utilizzato per la modifica dei dati in una tabella. La sua sintassi è:

<comando update> ::= UPDATE <nome_tabella>SET <nome_colonna>=<espressione>[, <nome_colonna>=<espressione>…][WHERE <condizione>] dove: <nome_tabella>identifica la tabella da aggiornareSET <nome_colonna>=<espressione>[, <nome_colonna>=<espressione>…]identifica le colonne e i valori con cui vanno aggiornate[WHERE <condizione>]identifica le righe a cui l’aggiornamento va limitato

Vedi esempio 17

Page 42: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 42

Il comando DELETE permette di effettuare la cancellazione di righe dati da una tabella. La sua sintassi è:

<comando_delete> ::= DELETE FROM <nome_tabella>[WHERE <condizione>]

dove: <nome_tabella> indica la tabella da cui cancellare le righe[WHERE <condizione>] specifica le righe da cancellare

se la <condizione> non viene specificata la tabella viene completamente svuotata

Vedi esempio 18

Page 43: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 43

Occupiamoci ora di quella parte del DML che analizza tutti i comandi finalizzati allo svolgimento delle operazioni di ricerca su dati già esi-stenti e tabelle già definite.

Nelle prossime slide, ci occuperemo dell’aspetto interrogazione di un database. I comandi di interrogazione -query- permettono di effettuare operazioni di ricerca sui dati contenuti nelle tabelle del database, im-postando le condizioni che tali dati devono soddisfare.

Tutte le interrogazioni sul database vengono effettuate utilizzando in maniera diretta o indiretta il comando di selezione specificato mediante l’operazione SELECT

Page 44: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 44

Le selezioni operano su tabelle e restituiscono come risultato una tabella. La sintassi del comando di selezione è la seguente:<comando_select> ::=SELECT [ALL | DISTINCT] <lista_di_selezione><espressione_di_tabella>[<clausola_di_ordinamento>]

dove <espressione_di_tabella> è così definita:<espressione_di_tabella> ::=<clausola_FROM>[<clausola_WHERE>][<clausola_GROUP_BY>][<clausola_HAVING>]

Page 45: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 45

Nel comando è obbligatorio specificare, oltre alla <lista_di_selezione>, la clausola FROM.La clausola FROM indica la tabella o le tabelle su cui eseguire la selezio-ne.La forma più semplice della lista di selezione è quella costituita da uno o più nomi di colonna della stessa tabella.Questa forma del comando di selezione realizza direttamente l’operazio-ne di proiezione definita nell’algebra relazionale.Ad esempio:SELECT Cod_Modello, Nome_Modello FROM Modelli

E’ da notare che l’ordine in cui viene chiesta la restituzione delle colonne è indipendente dall’ordine utilizzato al momento della costruzione della tabella.

Vedi esempio 19

Page 46: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 46

E’ possibile ridenominare le colonne della tabella risultante nel modo seguente:SELECT <nome_colonna> ‘<nome>’FROM <nome_tabella>

Ad esempio:SELECT Cod_Modello ‘Codice’ FROM Modelli

Qualora sia necessario selezionare tutte le colonne di una tabella, è possibile realizzare ciò, attraverso la seguente forma:SELECT * FROM <nome_tabella>

Ad esempio:SELECT * FROM Modelli

Vedi esempio 20

Page 47: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 47

Col comando:

SELECT Cod_Modello ‘Modelli presenti’ FROM Veicolisi ottiene una tabella con tante righe quante sono le righe di Veicoli, alcune delle quali contengono lo stesso codice modello.

Per eliminare i valori duplicati esiste la specifica di interrogazione DISTINCTAd esempio:

SELECT DISTINCT Cod_Modello ‘Modelli presenti’ FROM VeicoliIl risultato è una tabella dove i valori di Cod_Modello non vengono ripetuti.

Vedi esempio 21

Page 48: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 48

La clausola WHERE permette di specificare delle condizioni nella selezione. La sua sintassi è:<clausola_where> ::= WHERE <condizione>L’uso della clausola WHERE nel comando di selezione realizza l’operazione di selezione o restrizione definita nell’algebra relazionale: data una tabella e una condizione logica definita sugli attributi, la selezione restituisce una tabella con gli stessi attributi di quella di partenza, ma con le sole righe che soddisfano la condizioneLe condizioni della clausola where sono specificate mediante gli operatori di confronto, i connettori logici e gli operatori BETWEEN, IN, LIKE, IS NULL.Negli esempi che seguono, mostreremo l’uso della clausola WHERE con i vari tipi di operatori.

Page 49: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 49

Operatori di confronto: = ,<>,>,<,>=,<=SELECT *FROM Veicoli WHERE Cilindrata>1000

Connettori logici: AND, OR, NOTSELECT *FROM VeicoliWHERE Cod_Combustibile=‘01’AND Cilindrata>1000

Vedi esempio 22

Page 50: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 50

Le espressioni finora esaminate operano sulle righe della tabella e restituiscono sempre una tabella. Esistono però delle funzioni che calcolano espressioni su insiemi di righe e restituiscono un caso molto particolare di tabella, ovvero un singolo valore scalare.Le funzioni disponibili sono le seguenti:

MAX valore massimoMIN valore minimoSUM somma di valoriAVG media di valoriCOUNT conteggio di valori

Di seguito mostreremo alcuni esempi di utilizzo di queste funzioni:

Page 51: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 51

SELECT MAX(Cilindrata) ‘Cilindrata massima’FROM Veicoli

SELECT AVG(Cilindrata) ‘Cilindrata media’FROM Veicoli

SELECT COUNT(*) ‘Numero Veicoli’FROM Veicoli

SELECT MIN(Cilindrata) ‘Cilindrata minima’FROM VeicoliWHERE Cod_Combustibile=‘01’

Vedi esempio 23

Page 52: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 52

L’ordinamento può essere effettuato in base a una o più colonne e per ciascuna colonna può essere crescente o decrescente. La clausola ha il seguente formato:

<clausola_di_ordinamento> :: =ORDER BY <ordine> [{,<ordine>} …]dove <ordine> ::=<nome_colonna>|<numero_colonna> [ASC|DESC]

le specifiche ASC e DESC indicano se l’ordinamento deve essere crescente (default) o decrescente

Vedi esempio 24

Page 53: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 53

Vediamo ora come si effettua la ricerca di informazioni mettendo in rela-zione i dati presenti in tabelle diverse.Utilizzeremo a questo scopo la tec-nica delle join (congiunzioni) che realizza tali operazioni definite dalla algebra relazionale.Consideriamo due tabelle che abbiano colonne contenenti dati in comu-ne, tale condizione permette di definire una operazione di join. I nomi delle due colonne spesso sono uguali, ma ciò non è strettamente neces-sario; le due colonne devono in ogni caso avere lo stesso significato, ovvero i valori delle due colonne devono appartenere allo stesso domi-nio.Un caso molto comune e significativo di colonne comuni a due tabelle è quello in cui l’appartenenza allo stesso dominio deriva dalla presenza di relazioni tra le due entità rappresentate dalle due tabelle, e quindi dalla presenza di chiavi esterne.

Page 54: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 54

La Equi-Join realizza l’operazione di giunzione naturale definita nell’algebra relazionale: restituisce infatti una terza tabella le cui righe sono tutte e sole quelle ottenute dalle righe delle due tabelle di partenza in cui i valori delle colonne in comune sono uguali.L’operazione di equi-join è implementata in SQL come una forma particolare del comando di selezione:- nella clausola FROM vanno indicate le due tabelle correlate su cui va effettuata la join;- nella clausola WHERE va espresso il collegamento tra le due tabelle, mediante un’apposita condizione detta condizione di join.Per evitare ambiguità nella clausola WHERE e nella lista_di_selezione> è possibile indicare i nomi delle colonne qualificandoli mediante il nome della tabella cui appartengono nel seguente modo:nome_tabella.nome_colonna

Page 55: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 55

Ad esempio, utilizziamo la equi-join per visualizzare per ciascun veicolo la descrizione della relativa categoria; in questo caso la ricerca coinvolge le due tabelle Veicoli e Categorie, poiché l’informazione relativa al nome della categoria, Nome_Categoria, non è presente nella tabella Veicoli.Il comando SELECT che realizza l’equi-join è il seguente:

SELECT Targa, Categorie.Cod_Categoria, Nome_CategoriaFROM Veicoli, CategorieWHERE Veicoli.Cod_Categoria = Categorie.Cod_Categoria

Nella clausola WHERE possono essere aggiunte altre condizioni combi-nandole in AND con la condizione di JOIN per restringere l’insieme del-le righe restituite o combinandole in OR con la condizione di join per estendere l’insieme delle righe restituite.

Page 56: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 56

Se volessimo restringere l’esempio precedente ai soli veicoli con cilin-drata maggiore di 1600 e ordinare le righe per valori di targa crescenti, avremo:

SELECT Targa, Categorie.Cod_Categorie, Nome_CategoriaFROM Veicoli, CategorieWHERE Veicoli.Cod_Categoria = Categorie.Cod_Categoria AND Cilindrata > 1600ORDER BY Targa

Per evitare di specificare i nomi di tutte le colonne di una determinata tabella è definita la seguente notazione abbreviata:<nome_tabella>.*

Vedi esempio 25

Page 57: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 57

La equi-join è un caso particolare di inner-join: per la inner-join la condizione di join non deve essere necessariamente una condizione di uguaglianza.Nelle ultime revisioni allo standard sono stati introdotti, per specificare il tipo di join, dei costrutti ad hoc che però, alcune volte, non sono suppor-tati da DBMS commerciali.Per realizzare la inner-join, e quindi anche, come caso particolare, per la equi-join, è stato introdotto il comando INNER-JOIN, il cui formato è il seguente: <comando_INNER_JOIN> ::=<riferimento_a_tabella> [NATURAL] INNER JOIN<riferimento_a_tabella>[ON <condizione_di_join>| USING <lista_colonne_di_join>]

Page 58: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 58

Le clausole ON e USING sono alternative e servono entrambe a specificare la condizione di join. Utilizzando la prima clausola la condizione deve essere espressa esplicitamente e può contenere operatori diversi da quello di uguaglianza; la seconda è una forma abbreviata che esprime una equi-join effettuata in base alla lista di colonne che seguono la parola chiave USING. L’opzione NATURAL è un’ulteriore abbreviazione che indica una equi-join effettuata in base a tutte le colonne che nelle due tabelle sono identificate dallo stesso nome.Il seguente comando:SELECT *FROM Veicoli,CategorieWHERE Veicoli.Cod_Categoria = Categorie.Cod_Categoriausando il comando INNER JOIN diventa:

Page 59: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 59

Categorie INNER JOIN VeicoliON Categorie.Cod_Categorie = Veicoli.Cod_Categoria

oppureCategorie INNER JOIN VeicoliUSING Cod_Categoria

oppure Categorie NATURAL INNER JOIN Veicoli

Vedi esempio 26

Page 60: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 60

L’operazione di prodotto tra due tabelle , definita nell’algebra relazio-nale, si ottiene mediante una operazione di join espressa in maniera tradizionale in cui non venga specificata la condizione di join. Se le due tabelle sono composte da n e da m righe, la nuova tabella conterrà n*m righe, ottenute accodando ciascuna riga della prima tabella con ciascuna riga della seconda tabella, quindi:SELECT Categorie.*,Fabbriche.*FROM Categorie, FabbricheQuesto caso è previsto esplicitamente dalle nuove revisioni dello standard; è stato infatti definito il comando CROSS JOIN con la seguente sintassi:<riferimento_a_tabella> CROSS JOIN <riferimento_a_tabella>il comando precedente diventa:Categorie CROSS JOIN Fabbriche (comando non presente in mysql)

Page 61: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 61

Le viste logiche, dette anche viste o view, possono essere definite come tabelle virtuali.Le viste, a differenza delle tabelle usate finora dette tabelle base, non contengono dati propri ma sono costituite dalla riaggregazione dei dati contenuti nelle tabelle base.Anche le viste hanno una loro struttura che però è basata su quella delle tabelle base. Le view insomma non contengono dati ma forniscono una diversa visione dei dati delle tabelle.La definizione di una vista può essere basata su una o su più tabelle (o su una o più viste).La vista appare all’utente come una nornale tabella e può essere utiliz-zata per eseguire operazioni sul database quali la ricerca e l’aggiorna-mento dei dati.I dati che vengono modificati operando su una vista risulteranno modoficati anche nelle tabelle in base alle quali la lista è definita.

Page 62: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 62

La sintassi del comando del DDL che consente di creare una vista è la seguente:CREATE VIEW <nome_view>[(<nome_colonna> {,<nome_colonna>}…..)]AS <comando_select> [WITH [LOCAL | CASCADED] CHECK OPTION]dove:<nome_view> è il nome della vista<nome_colonna> indicano i nomi assegnati alle colonne della vista<comando_select> seleziona con condizioni le colonne e le tabelle con cui riempire le colonne della vista[WITH CHECK OPTION] assicura che le modifiche attraverso la vista soddisfano la clausola WHERE della selezioneLOCAL | CASCADED sono opzioni alternative; CASCADE, specificata in V2, non permette di modificare dati tramite V1 che violano le condi-zioni di V2 Vedi esempio

27

Page 63: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 63

Il comando del DDL che elimina la definizione di una vista è il seguente:

DROP VIEW <nome_view> {RESTRICT | CASCADE}

le opzioni RESTRICT | CASCADE sono alternative:

• con RESTRICT la vista viene eliminata solo se non è riferita nella defi- nizione di altre viste: se la vista V1 è stata usata nella definizione della vista V2 il comando

DROP VIEW V1 RESTRICT non ha effetti sul database

• con CASCADE invece oltre ad essere eliminata la vista V1 viene eliminata anche quella V2 che da essa dipende

Page 64: Linguaggio sql: DDL1 breve presentazione curata da Aldo Pappalepore

linguaggio sql: DML 64

In generale per la selezione dei dati è possibile utilizzare una vista al posto di una tabella; il DBMS in effetti traduce i riferimenti ad una vista in riferimenti alle tabelle che la definiscono.Per esempio il comando seguente:

SELECT A1_TargaFROM A1WHERE A1_Cilindrata>1000

Viene tradotto in:

SELECT TargaFROM VeicoliWHERE Cilindrata<1500 AND Cilindrata>1000