Basi di Dati
prof. G.Tombolini
Gruppo utenti 1
Vista 1
Gruppo utenti 2
Vista 2
Database concettuale
Definizione
e corrispondenza
scritte nel linguaggio
di definizione dei dati
Gruppo utenti n
Vista n
Database
fisico
Implementato
su supporti
fisici
Definizione
e corrispondenza
scritte nel linguaggio
di definizione dei dati
del sotto schema
ELEMENTI BASE :SQL
1 1
DML
(Data Manipulation
Language)
2 2
DDL
(Data Definition Language)
SELECT
CREATE
INSERT
ALTER
UPDATE
DROP
DELETE
RENAME
TRUNCATE
3 3
4 4
TCL
(Transaction Control Language)
DCL
(Data Control Language)
COMMIT
GRANT
ROLLBACK
REVOKE
SAVEPOINT
5 5
6 6
Istruzioni select di base
Scrittura di istruzioni sql
SELECT
identifica le colonne
FROM identifica la tabella
7 7
Le istruzioni SQL possono essere scritte
indifferentemente in maiuscolo o in minuscolo.
Le istruzione SQL possono essere scritte su una o più
righe
Non è possibile abbreviare o dividere su più righe le
parole chiavi
Le clausole vengono in generale scritte su righe
diverse
Per facilitare le lettura del codice, è possibile utilizzare
8 8
tabulazioni e indentazione
Selezione di tutte le colonne
Impostazioni predefinite delle
intestazioni di colonne
SQL> SELECT *
2 FROM IMPIEGATI;
Dipartimento
------------------10
20
nome
località
--------- ---------ricerca
NY
sviluppo
Dallas
Allineamento predefinito
- Sinistra: dati di tipo carattere e data
- Destra: dati di tipo numerico
Visualizzazione predefinita: caratteri maiuscoli
9 9
Espressioni aritmetiche
Operatore di concatenazione
Creare espressioni su dati di tipo NUMBER e
DATE utilizzando operatori aritmetici
OPERATORE
DESCRIZIONE
+
Addizione
-
Sottrazione
*
Moltiplicazione
/
Divisione
10 10
11 11
Collega
tramite concatenazione colonne o
stringhe di caratteri ad altre colonne
E’ rappresentato da due barre verticali o
pipe ||
Crea una nuova colonna che rappresenta
un’espressione di caratteri
12 12
Tipi di dati disponibili
Stringhe di caratteri
Le
stringhe di caratteri sono caratteri,
numeri o date contenuti nella lista dopo
l’istruzione SELECT
I valori di tipo carattere e data devono
essere racchiusi tra apici (‘ ‘)
Ciascuna stringa d caratteri viene
visualizzata una volta per ciascuna riga
restituita.
Tipi di dati
NUMBER(p,s)
Descrizione
VARCHAR2(s)
Dati di tipo carattere con lunghezza variabile
massima s.
DATE
Data e ora comprese tra il 1° gennaio 4712
a.C. e il 31 dicembre 9999 d.C.
CHAR(s)
Dati di tipo carattere con lunghezza fissa s
Valore numerico con un numero massimo di
cifre p e un numero di decimali s inseriti a
destra della virgola decimale
13 13
14 14
Limitazione delle righe selezionate
LIMITAZIONE
Limitare le righe selezionate utilizzando la
clausola WHERE
SQL> SELECT [DISTINCT]{*| colonna [alias], …}
FROM
tabella
[WHERE
condizione/i ];
E
ORDINAMENTO
15 15
La clausola WHERE segue la clausola FROM
16 16
Stringhe di caratteri e date
Operatori di confronto
Le
stringhe di caratteri e le date vengono
racchiuse tra apici (‘’).
I valori di tipo carattere non possono
essere scritti indifferentemente in
maiuscolo o minuscolo, mentre per le date
è rilevante il formato.
Il formato data predefinito è DD-MON-YY
Operatore
Significato
=
Uguale a
>
Maggiore di
>=
Maggiore o uguale a
<
<=
Minore di
Minore o uguale a
<>
Diverso da
17 17
Altri operatori di confronto
Operatore
Significato
BETWEEN
…AND…
Tra due valori
IN(Lista)
Corrispondenza a un valore
qualsiasi della lista
LIKE
Corrispondenza a un carattere
campione
IS NULL
E’ un valore nullo
18 18
Utilizzo dell’operatore BETWEEN
Utilizzare l’operatore BETWEEN per
visualizzare le righe in base a un intervallo di
valori
SQL> SELECT nome, salario
FROM impiegati
WHERE salario BETWEEN 1000 AND 1500;
NOME
----------MARTIN
TURNER
ADAMS
19 19
SALARIO
----------1250
1500
1100
20
Utilizzo dell’operatore IN
Utilizzo dell’operatore LIKE
Utilizzare l’operatore IN per verificare se un
valore è contenuto in una determinata lista
SQL> SELECT matricola, nome, cod_superiore
FROM impiegato
WHERE cod_superiore IN (7902,7566,7788);
MATRICOLA
NOME
7902
FORD
7369
7788
SALARIO
COD_SUPERIORE
3000
7566
SMITH
800
7902
SCOTT
1100
7788
Utilizzare
l’operatore LIKE per ricercare
valori di stringa validi utilizzando i caratteri
jolly
Le condizioni di ricerca possono contenere
sia caratteri che numeri
- % corrisponde a zero o a più caratteri
- _ corrisponde a un singolo carattere
21 21
Caratteri jolly
Utilizzo dell’ operatore IS NULL
%
SQL> SELECT nome
FROM impiegato
WHERE nome LIKE ‘M%’;
22 22
L’operatore IS NULL consente di verificare
se vi sono valori nulli
NOME
--------------MARTIN
MILLER
SQL> SELECT nome, mansione
FROM impiegato
WHERE mansione IS NULL;
_
SQL> SELECT nome
FROM impiegato
WHERE nome LIKE ‘M___’;
NOME
NOME
KING
--------------MARK
MANSIONE
MATT
23 23
24 24
Operatori logici
Utilizzo dell’operatore AND
AND richiede che entrambe le condizioni
restituiscano TRUE
Operatore
Significato
AND
Restituisce TRUE se entrambe le
condizioni sono TRUE
OR
Restituisce TRUE se una delle due
condizioni è TRUE
NOT
Restituisce TRUE se la condizione
che segue è FALSE
SQL> SELECT matricola, nome, mansione, salario
FROM impiegato
WHERE salario >= 1100
AND mansione = ‘MANAGER’;
MATRICOLA
NOME
7876
7934
MANSIONE
SALARIO
ADAMS
MANAGER
MILLER
MANAGER
1100
1300
25 25
26 26
Tavola di verità AND
Utilizzo dell’operatore OR
La tabella seguente riporta i risultati ottenuti
combinando due espressioni con AND
AND
TRUE
FALSE
NULL
TRUE
TRUE
FALSE
NULL
FALSE
FALSE
FALSE
FALSE
NULL
NULL
FALSE
OR richiede che una delle due condizioni
restituisca TRUE
SQL> SELECT matricola, nome, mansione, salario
FROM impiegato
WHERE salario >= 1100
OR mansione = ‘MANAGER’;
MATRICOLA
NULL
27 27
NOME
MANSIONE
SALARIO
7839
KING
PRESIDENT
5000
7698
7666
JONES
CLARK
MANAGER
MANAGER
950
1250
28 28
Tavola di verità OR
Utilizzo dell’operatore NOT
La tabella seguente riporta i risultati ottenuti
combinando due espressioni con OR
OR
TRUE
FALSE
NULL
TRUE
TRUE
TRUE
TRUE
FALSE
TRUE
FALSE
NULL
NULL
TRUE
NULL
NULL
SQL> SELECT nome, mansione
FROM impiegato
WHERE mansione NOT IN
(‘MANAGER’,’ANALYST’);
NOME
KING
MARTIN
TURNER
MANSIONE
PRESIDENT
SALESMAN
SALESMAN
29 29
Regole di precedenza
Tavola di verità NOT
Ordine di esaminazione Operatore
La Tabella seguente riporta i risultati ottenuti
applicando l’operatore NOT a una condizione
NOT
TRUE
TRUE
FALSE
FALSE
TRUE
30 30
NULL
1
Tutti gli operatori di confronto
2
NOT
3
AND
4
OR
NULL
31 31
E’ possibile utilizzare le parentesi per
specificare l’ordine di precedenza degli
operatori
32 32
Clausola ORDER BY
Ordinare
Utilizza clausola ORDER BY
la righe con la clausola ORDER
BY:
- ASC: ordine crescente(impostazione
predefinita)
- DESC: ordine decrescente
Nell’istruzione SELECT la clausola ORDER
BY viene inserita per ultima
SQL> SELECT nome, mansione, cod_dipartimento,
data_assunzione
FROM impiegato
ORDER BY data_assunzione;
NOME MANSIONE
SMITH MANAGER
ALLEN ANALYST
COD_DIPARTIMENTO
20
30
DATA_ASSUNZIONE
17-DEC-80
20-FEB-81
33 33
Ordinamento in ordine decrescente
34 34
Ordinamento in ordine crescente
SQL> SELECT nome, mansione, cod_dipartimento,
data_assunzione
FROM impiegato
ORDER BY data_assunzione ASC;
SQL> SELECT nome, mansione, cod_dipartimento,
data_assunzione
FROM impiegato
ORDER BY data_assunzione DESC;
NOME
NOME
MANSIONE
SMITH MANAGER
ALLEN ANALYST
MILLER MANAGER
COD_DIPARTIMENTO
MANSIONE
COD_DIPARTIMENTO
DATA_ASSUNZIONE
DATA_ASSUNZIONE
20
30
20
17-DEC-83
20-FEB-82
28-SEP-81
35 35
SMITH MANAGER
ALLEN ANALYST
MILLER MANAGER
20
30
20
17-DEC-81
20-FEB-82
28-SEP-83
36 36
Ordinamento in base ad alias di
colonna
SQL> SELECT matricola, nome, salario*12 sal_annuo
FROM impiegato
ORDER BY data_assunzione sal_annuo;
MATRICOLA
7369
7654
876
NOME
SMITH
JAMES
ADAMS
Funzioni che agiscono
su una sola riga
SAL_ANNUO
9600
11400
13200
37 37
Funzioni che agiscono su una sola riga
38 38
Funzioni di stringa
Le funzioni che agiscono su una sola riga sono utilizzate per manipolare i
dati. Accettano uno o più argomenti e restituiscono un valore per ogni riga
restituita dalla query. È possibile scegliere tra i seguenti argomenti:
– Costante definita dall’utente;
– Valore di variabile;
– Nome di colonna;
– Espressione.
Caratteristiche delle funzioni che agiscono su una sola riga:
– Agiscono su ciascuna riga restituita dalla query;
– Restituiscono un risultato per riga;
– Possono restituire un valore di un tipo diverso da quello a cui è stato fatto
riferimento;
– Accettano uno o più argomenti;
– Possono essere utilizzate nelle clausole SELECT, WHERE e ORDER BY e
possono essere nidificate.
Nome_funzione (colonna | espressione, [arg1, arg2, …])
39 39
Funzioni
di stringa
Funzioni di conversione
dei caratteri in maiuscolo
e minuscolo
LOWER
UPPER
INITCAP
Funzioni di
manipolazione
delle stringhe
CONCAT
SUBSTR
LENGTH
INSTR
LPAD
TRIM
40 40
Funzioni di stringa
Esempi di funzioni di stringa
Funzione
Descrizione
LOWER(colonna|espressione)
Converte le stringhe con caratteri misti o maiuscoli in caratteri minuscoli
UPPER(colonna|espressione)
Converte le stringhe con caratteri misti o minuscoli in caratteri maiuscoli
INITCAP(colonna|espressione)
Converte la prima lettera di ogni parola in maiuscolo e in minuscolo le restanti
lettere della parola
CONCAT(colonna1|espressione1,
colonna2|espressione2)
Concatena il primo valore di tipo carattere al secondo; equivale all’operatore di
concatenazione ( || )
SUBSTR(colonna|espressione, m
[,n])
Restituisce i caratteri specificati dal valore di tipo carattere m per una
lunghezza di n caratteri. Se m è negativo, il conteggio inizia dalla fine del valore
di tipo carattere. Se n è assente, vengono restituiti tutti i caratteri fino alla fine
della stringa
LENGTH(colonna|espressione)
Restituisce il numero di caratteri nella stringa
INSTR(colonna|espressione, m)
Restituisce la posizione numerica di un determinato carattere
LPAD(colonna|espressione, n,
‘string’)
Riempie una stringa fino a una lunghezza totale di n caratteri aggiungendo a
sinistra una determinata serie di caratteri
TRIM(iniziale|finale|entrambi,
carattere_da_eliminare FROM
stringa_da_cui_eliminare)
Consente di eliminare i caratteri iniziali o finali (o entrambi) di una stringa. Se
carattere_da_eliminare o stringa_da_cui_eliminare sono stringhe di caratteri, è
necessario racchiuderle tra apici ( ‘ ‘ ). Questa funzione è disponibile a partire
dalla versione Oracle8i
Funzione
Risultato
LOWER(‘SQL Course’)
sql course
UPPER(‘SQL Course’)
SQL COURSE
INITCAP(‘SQL Course’)
Sql Course
CONCAT(‘Good’ , ‘String’)
GoodString
SUBSTR(‘String’, 1, 3)
Str
LENGTH(‘String’)
6
INSTR(‘String’, ‘r’)
3
LPAD(sal, 10, ‘*’)
******5000
TRIM(‘S’ FROM ‘SSMITH’)
MITH
41 41
42 42
Utilizzo delle date
Funzioni numeriche
Funzione
Descrizione
ROUND(colonna|espressione, n )
ROUND(45.926,2)
45.93
Arrotonda la colonna, l’espressione o il
valore a n decimali oppure, se n viene
omesso, senza decimali. Se n è
negativo, vengono arrotondati i numeri a
sinistra della virgola
TRUNC(colonna|espressione, n )
TRUNC (45.926,2)
45.92
Tronca la colonna , l’espressione o il
valore a n decimali oppure, se n viene
omesso, senza decimali. Se n è
negativo, i numeri a sinistra della virgola
vengono troncati a zero, < 0
MOD(m, n)
MOD(1600, 300)
Restituisce il resto della divisione di m
per n. < 0
100
43 43
Oracle memorizza le date in formato numerico
interno:secolo, anno, mese, giorno, ore, minuti,
secondi.
Il formato data predefinito è DD-MM-YY.
La funzione SYSDATE restituisce data e ora
correnti.
DUAL è una tabella fittizia utilizzata per
visualizzare SYSDATE è di proprietà dell’
utente SYS ed è accessibile a tutti gli
utenti.Contiene una colonna DUMMY e una
riga con il valore X .
44 44
Funzioni di data
Operazioni aritmetiche con le date
Funzione
Descrizione
Sommare o sottrarre un numero da una data in modo da
ottenere un valore di tipo data .
Eseguire la sottrazione tra due date per trovare il numero di
giorni trascorsi tra di esse.
Sommare ore a una data dividendo il numero di ore per 24.
MONTHS_BETWEEN(data1, data2)
MONTHS_BETWEEN(’01-SET-95’,’11-GEN-94’)
19.6774194
Trova il numero di mesi trascorsi tra data1 e
data2. Il risultato può essere un valore positivo
o negativo.
ADD_MONTHS(data, n)
ADD_MONTHS(’11-GEN-94’,6)
Aggiunge un numero n di mesi alla data. Il
valore n deve essere un numero intero e può
essere negativo.
Operazione
Risultato
Descrizione
Data + numero
Data
Somma un numero di giorni a una
data. < 0
Data – numero
Data
Sottrae un numero di giorni da una
data. < 0
Data – data
Numero di giorni Sottrae una data da un’altra data.
<0
Data + numero/24
Data
Somma un numero di ore a una
data.
<0
’11-LUG-94’
NEXT_DAY(data,’car’)
NEXT_DAY(’01-SET-95’, ‘VENERDI’)
95’
LAST_DAY(data)
LAST_DAY(’01-SET-95’)
’08-SET-
’30-SET-95’
ROUND(data [, fmt])
ROUND(’25-LUG-95’,’MONTH’)
RUND(’25-LUG-95’,’YEAR’)
TRUNC(data [, fmt])
TRUNC(’25-LUG-95’,’MONTH’)
TRUNC(’25-LUG-95’,’YEAR’)
’01-AGO-95’
’01-GEN-96’ O
’01-LUG-95’
’01-GEN-95’
45 45
Trova la data del giorno della settimana
specificato (‘car’) successivo alla data .
Individua la data dell’ultimo giorno del mese
relativo alla data specificata.
Restituisce la data arrotondata all’unità
specificata nel modello del formato fmt. Se tale
modello non viene specificato, la data viene
troncata al giorno più vicino.
Restituisce la data con la parte del giorno
troncata all’unità specificata dal modello del
formato fmt. Se tale modello non viene
specificato, la data viene troncata al giorno più
vicino.
46 46
Conversione esplicita di tipi di dati
Conversione implicita di tipi di dati
Funzione
Descrizione
TO_CHAR(numero|data,[f
mt],[nlsparams])
Converte un valore numerico o di data nella stringa di caratteri VARCHAR2 con
il modello di formato fmt.
Conversione numerica
Il parametro nlsparams specifica i seguenti caratteri, restituiti da elementi in
formato numerico:
carattere decimale
Separatore di gruppo
Simbolo di valuta locale
Simbolo di valuta internazionale
Se nlsparams o qualsiasi altro parametro viene omesso, la funzione utilizza i
valori di parametro predefiniti per la sessione.
Conversione di data
Il parametro nlsparams specifica la lingua in cui vengono restituiti i nomi del
mese e del giorno e le abbreviazioni. Se tale parametro viene omesso, la
funzione utilizza la lingua predefinita per la sessione .
TO_NUMBER(car,
[fmt],[nlsparams])
Converte una stringa di caratteri contenente cifre in un numero nel formato
specificato dal modello facoltativo fmt. In questa funzione lo scopo del
parametro nlsparams è uguale a quello della funzione TO_CHAR per la
conversione numerica.
TO_DATE(car,
[fmt],[nlsparams])
Converte una stringa di caratteri che rappresenta una data in un valore di data
specificato in base a fmt. Se fmt è omesso, il formato è DD-MON-YY. In questa
funzione il ruolo del parametro nlsparams è uguale a quello della funzione
TO_CHAR per la conversione di data.
48 48
Per le assegnazioni, Oracle Server può
eseguire automaticamente le seguenti
conversioni:
Da
VARCHAR2 or CHAR
A
NUMBER
VARCHAR2 or CHAR
DATE
NUMBER
DATE
VARCHAR2
VARCHAR2
47 47
Funzione TO_CHAR con date
Elementi del modello del formato data
TO_CHAR (data, ‘fmt’ )
La funzione TO_CHAR consente di convertire una data dal formato
predefinito in un altro formato specificato dall’utente.
Il modello del formato deve essere racchiuso tra apici e distingue tra
maiuscole e minuscole.
Il modello del formato può contenere qualsiasi elemento del formato
data valido.
Assicurarsi di separare il valore di data dal modello del formato con una
virgola.
I nomi dei giorni e dei mesi dell’output vengono automaticamente
riempiti con spazi vuoti.
Per eliminare gli spazi aggiunti o gli zeri iniziali, utilizzare l’elemento fm
di riempimento.
È possibile ridimensionare la larghezza con cui il campo carattere
risultante viene visualizzato tramite il comando COLUMN di SQL*Plus.
La colonna risultante ha una larghezza predefinita di 80 caratteri.
Elemento
Descrizione
YYYY
Anno completo in cifre
YEAR
Anno iscritto per esteso
MM
Mese espresso con due cifre
MONTH
Nome completo del mese
DY
Abbreviazione di tre lettere per il
giorno della settimana
DAY
Nome completo del giorno
49 49
Formato data RR
Funzione TO_CHAR con numeri
Il formato data RR è simile all’elemento YY, ma consente di specificare
secoli diversi.utilizzando l’elemento del formato data RR al posto di YY, il
secolo del valore restituito varia in base alle due cifre dell’anno specificato
e alle due cifre dell’anno corrente.
Se le due cifre dell’anno corrente sono:
0 – 49
Se le 2 cifre
dell’anno
specificato
sono:
50 50
50 – 99
TO_CHAR (numero, ‘fmt’ )
Utilizzare questi formati con la funzione TO_CHAR per visualizzare
valori numerici come stringhe di caratteri:
Elemento
0 – 49
La data restituita è nel secolo
corrente
La data restituita è nel secolo
successivo a quello corrente
50 - 99
La data restituita è nel secolo
precedente a quello corrente
La data restituita è nel secolo
corrente
Descrizione
9
Rappresenta un numero
0
Forza la visualizzazione di uno zero
$
Inserisce il simbolo di dollaro mobile
Anno corrente
Data specificata
Formato RR
Formato YY
€
Utilizza il simbolo della valuta locale mobile
1994
27-OTT-95
1995
1995
.
Visualizza il separatore decimale
1994
27-OTT-17
2017
1917
2002
27-OTT-17
2017
2017
,
Visualizza il separatore di migliaia
51 51
52 52
Funzione NVL
Funzioni TO_NUMBER e TO_DATE
Converte un valore nullo in un valore reale.
È possibile utilizzare i tipi di dati data, carattere e numero.
I tipi di dati interessati dalla conversione devono corrispondere.
Convertire una stringa di caratteri in un formato
numerico tramite la funzione TO_NUMBER.
TO_NUMBER (car , [‘fmt’ ])
Convertire una stringa di caratteri in un formato data
tramite la funzione TO_DATE.
TO_DATE (car , [‘fmt’ ])
Tipi di dati
Esempi di conversione
NUMBER
NVL (colonna_numero, 9)
DATE
NVL (colonna_data, ’01-GEN-95’)
CHAR o
VARCHAR2
NVL (colonna_carattere, ‘Unavailable’)
Utilizzo della funzione NVL:
SQL> SELECT nome, salario, commissione, (salario*12)+NVL(commissione, 0)
FROM impiegati ;
53 53
54 54
Funzioni nidificate
Funzione DECODE
La funzione DECODE decodifica un’espressione in modo analogo alla logica di
IF – THEN – ELSE utilizzata in vari linguaggi. L’espressione viene decodificata dopo
essere stata confrontata con ciascun valore di ricerca. Se l’espressione corrisponde
a
Ricerca viene restituito il risultato. Se il valore predefinito viene omesso, nelle
posizioni in cui il valore ricercato non corrisponde ad alcun risultato viene restituito
un valore nullo.
DECODE(col/espressione, ricerca1, risultato1 [, ricerca2, risultato2, ….,] [,predefinito])
Le funzioni che agiscono su una sola riga possono essere
nidificate fino a un numero illimitato di livelli.
Le funzioni nidificate sono eseguite dal livello più interno al
livello più esterno.
F3 (F2 (F1
(col, arg1), arg2 ),
arg3 )
Utilizzo della funzione DECODE:
Fase 1 = Risultato 1
SQL> SELECT mansione, salario,
2
DECODE(mansione, ‘ANALYST’, SALARIO*1.1,
3
‘CLERK’,
SALARIO*1.15,
4
‘MANAGER’, SALARIO*1.20,
5
SALARIO)
SALARIO_INCREMENTATO
6 FROM impiegati ;
Fase 2 = Risultato 2
Fase 3 = Risultato 3
55 55
Esempio funzioni nidificate:
SQL> SELECT nome, NVL (TO_CHAR (superiore), ‘No Manager’)
2 FROM impiegati
3 WHERE superiore IS NULL ;
56 56
Definizione di join
L’operazione di join consente di eseguire query su dati
contenuti in più tabelle.
SELECT tabella1.colonna, tabella2.colonna
FROM tabella1, tabella2
WHERE tabella1.colonna1 = tabella2.colonna2
Visualizzazione di dati
contenuti in più tabelle
La condizione di join deve essere inserita nella clausola
WHERE.
Se lo stesso nome di colonna appare in più tabelle,
anteporre il nome della tabella a quello della colonna.
57 57
Prodotto cartesiano
Un
58 58
Tipi di join
prodotto si definisce cartesiano se:
I due tipi principali di join sono:
Equijoins
Non-equijoins
– Una condizione di join viene omessa
– Una condizione di join non è valida
– Tutte le righe della prima tabella vengono
unite tramite join a tutte le righe della
seconda tabella
evitare di ottenere un prodotto
cartesiano, inserire sempre una
condizione di join valida nella clausola
WHERE
Altri metodi di join sono:
Outer joins
Self joins
Per
59 59
60 60
Recupero di record tramite
equijoin
Identificazione di nomi di colonna
ambigui
Anteporre
SELECT matricola,nome, impiegati.cod_dipartimento,
localita
FROM impiegati, dipartimenti
WHERE impiegati.cod_dipartimento =
dipartimenti.cod_dipartimento
La clausola SELECT specifica i nomi di colonna da
recuperare
La clausola FROM specifica le due tabelle da cui ricavare
i dati
La clausola WHERE specifica il metodo di join delle due
tabelle
il nome della tabella ai nomi di
colonna presenti in più tabelle
Per ottenere prestazioni ottimali,
aggiungere il nome della tabella sotto
forma di prefisso
Assegnare alias alle colonne che hanno lo
stesso nome ma che risiedono in tabelle
diverse
61 61
Recupero di record tramite nonequijoin
Utilizzo degli alias di tabella
62 62
Utilizzare gli alias di tabella per semplificare
le query
SELECT i.nome, i.salario, l.livello
FROM impiegati i, liv_salario
WHERE i.salario
BETWEEN l.sal_min AND l.sal_max;
SELECT i.matricola,i.nome, i.cod_dipartimento,
d.localita
FROM impiegati i, dipartimenti d
WHERE i.cod_dipartimento = d.cod_dipartimento
63 63
64 64
Outer join
Self join
L’outer
join si utilizza per visualizzare le
righe che di solito non soddisfano la
condizione di join
L’operatore di outer join è il segno ‘+’
Talvolta è necessario unire tramite join una
tabella a se stessa
SELECT a.colonna, b.colonna
FROM tabella a, tabella b
WHERE a.colonna1 = b.colonna2
SELECT tabella1.colonna, tabella2.colonna
FROM tabella1, tabella2
WHERE tabella1.colonna1 = tabella2.colonna2(+)
65 65
66 66
Tipi di funzioni di gruppo
Aggregazione di dati tramite
funzioni di gruppo
67 67
AVG([DISTINCT] n )
Valore medio di n, i valori nulli
vengono ignorati
COUNT({*|[DISTINCT] espr})
Numero di righe, dove espr
restituisce un valore diverso da nullo
MAX([DISTINCT] espr)
Valore massimo di espr; i valori nulli
vengono ignorati
MIN([DISTINCT] espr)
Valore minimo di espr; i valori nulli
vengono ignorati
STDDEV([DISTINCT] n)
Deviazione standard di n, i valori
nulli vengono ignorati
SUM([DISTINCT] n)
Somma di n, i valori nulli vengono
ignorati
VARIANCE([DISTINCT] n)
Varianza di n, i valori nulli vengono
ignorati
68 68
Creazione di gruppi di dati:
clausola GROUP BY
Utilizzo della clausola GROUP
BY su più colonne
Per dividere le righe di una tabella in gruppi più
piccoli, utilizzare la clausola GROUP BY
SQL>SELECT cod_dipartimento, mansione, sum(salario)
FROM impiegati
GROUP BY cod_dipartimento, mansione;
COD_DIPARTIMENTO MANSIONE SUM(SALARIO)
10 IMPIEGATO
1300
10 DIRIGENTE
2450
10 PRESIDENTE
5000
20 ANALISTA
6000
20 IMPIEGATO
1900
SELECT colonna,funzione_gruppo(colonna)
FROM tabella
[ WHERE condizione ]
[ GROUP BY espressione_group_by ]
[ ORDER BY colonna ]
9 rows selected
69 69
Query non valide con le funzioni
di gruppo
SQL>SELECT cod_dipartimento, COUNT(nome)
FROM impiegati;
E
R
R
A
T
A
Le colonne o le espressioni nella lista dopo l’istruzione SELECT che non sono funzioni aggregate devono
essere inserite nella clausola GROUP BY.
SQL>SELECT cod_dipartimento, AVG(salario)
FROM impiegati
WHERE AVG(salario) > 2000
GROUP BY cod_dipartimento;
E
R
R
A
T
A
70 70
Esclusione dei risultati di
raggruppamento: clausola HAVING
La clausola HAVING consente di limitare i gruppi
Le righe vengono raggruppate.
Viene applicata la funzione di gruppo.
Vengono visualizzati i gruppi che soddisfano le condizioni della clausola
HAVING
SELECT colonna,funzione_gruppo
FROM tabella
[WHERE condizione]
[GROUP BY espressione_group_by]
[HAVING condizione_gruppo]
[ORDER BY colonna];
•Non è possibile utilizzare la clausola WHERE per limitare i gruppi
71 71
72 72
Utilizzo della clausola HAVING
SQL>SELECT cod_dipartimento, MAX(salario)
FROM impiegati
GROUP BY cod_dipartimento
HAVING MAX(salario) > 2000;
Subquery
COD_DIPARTIMENTO MAX(SALARIO)
10
5000
20
3000
73 73
Subquery
74 74
Utilizzo di una subquery
SELECT lista_select
FROM tabella
WHERE espr operatore
(SELECT lista_select
FROM tabella);
SELECT nome
FROM impiegati
WHERE salario >
(SELECT salario
FROM impiegati
WHERE matricola = 7566);
La subquery (query interna) viene eseguita prima della query principale.
Il risultato della subquery viene utilizzato dalla query principale(query esterna)
NOME
--------------BIANCHI
ROSSI
VERDI
E’ possibile inserire subquery nelle clausole SQL elencate di seguito:
Clausola WHERE;
Clausola HAVING;
Clausola FROM.
75 75
76 76
Istruzioni per l’ utilizzo delle
subquery
Racchiudere le subquery tra parentesi.
Inserire le subquery a destra dell’operatore di
confronto.
Non aggiungere una clausola ORDER BY alla
subquery.
Utilizzare operatori che agiscono su una sola
riga con subquery che restituiscono una sola
riga.
Utilizzare operatori che agiscono su più righe
con subquery che restituiscono più righe.
77 77
Subquery che restituiscono una
sola riga
Restituiscono una sola riga.
Utilizzano operatori di confronto che agiscono su una
sola riga
Operatore
Significato
=
Uguale a
>
Maggiore di
>=
Maggiore o uguale a
<
Minore di
<=
Minore o uguale a
<>
Diverso da
78 78
Subquery che restituiscono più
righe
Restituiscono più righe.
Utilizzano operatori di confronto che agiscono su più righe.
Operatore
Significato
IN
Uguale a qualsiasi membro nella lista
ANY
Confronta un valore con tutti i valori
restituiti dalla subquery
ALL
Confronta un valore con tutti i valori
restituiti dalla subquery
Subquery che restituiscono più
colonne
79 79
80 80
Subquery che restituiscono più
colonne
Le subquery che restituiscono più colonne consentono di combinare
condizioni WHERE duplicate in un’unica clausola WHERE.
Utilizzo di subquery che
restituiscono più colonne
Visualizzazione degli identificativi dell’ordine, del prodotto e della quantità di
articoli contenuti nella tabella ARTICOLI che corrispondono all’identificativo del
prodotto e alla quantità di un articolo presente nell’ordine 605
SELECT colonna, colonna, …
FROM tabella
WHERE (colonna, colonna, …) IN
(SELECT colonna, colonna, …
FROM tabella
WHERE condizione);
SELECT id_ordine, id_prodotto, qta
FROM articoli
WHERE (id_prodotto, qta) IN
(SELECT id_prodotto, qta
FROM articoli
WHERE id_ordine = 605)
AND id_ordine <> 605;
81 81
82 82
Istruzione INSERT
Aggiungere
nuove righe alla tabella
tramite l’istruzione INSERT.
Manipolazione di Dati
INSERT INTO tabella [(colonna[, colonna…])]
VALUES
(valore [, valore…]) ;
Linguaggio DML
(Data Manipulation Language)
Se
83 83
si utilizza la sintassi descritta, nella
tabella viene inserita solo una riga alla
volta.
84 84
Istruzione UPDATE
Istruzione DELETE
Modificare le righe esistenti tramite l’istruzione UPDATE.
Se necessario, è possibile aggiornare più righe alla
volta.
E’
possibile eliminare righe esistenti da
una tabella tramite l’istruzione DELETE.
DELETE [FROM] tabella
[WHERE
condizione] ;
UPDATE tabella
SET
colonna = valore [,colonna = valore, …]
[WHERE condizione] ;
85 85
86 86
Elaborazione di transazioni
implicite
Controllo delle transazioni
Istruzione
Descrizione
COMMIT
Termina la transazione corrente
rendendo permanenti tutte le modifiche
apportate.
Contrassegna un savepoint all’interno
SAVEPOINT NOME
della transazione corrente.
ROLLBACK [TO SAVEPOINT
nome]
ROLLBACK termina la transazione
corrente annullando tutte le modifiche
apportate; ROLLBACK TO SAVEPOINT
ritorna al savepoint specificato della
transazione corrente, eliminando il
savepoint e le successive modifiche. Se
non si specifica quest’ultima clausola,
l’istruzione ROLLBACK annulla le
modifiche apportate nell’intera
transazione.
87 87
Ha luogo un commit automatico quando:
- viene eseguita un’istruzione DDL;
- viene eseguita un’istruzione DCL;
- SQL*Plus viene terminato secondo la normale
procedura,
senza eseguire in modo esplicito l’istruzione COMMIT o
ROLLBACK.
Ha luogo un rollback automatico quando SQL*Plus viene
terminato in modo anomalo o il sistema si blocca.
88 88
Stato dei dati prima dell’esecuzione
di COMMIT o ROLLBACK
Stato dei dati dopo l’esecuzione di
COMMIT
Le operazioni di manipolazione dei dati hanno effetto
principalmente sul buffer del database; di conseguenza, è
possibile ripristinare lo stato precedente dei dati.
L’utente corrente può controllare i risultati delle operazioni di
manipolazione dei dati eseguendo query sulle tabelle.
Gli altri utenti non hanno accesso ai risultati delle operazioni di
manipolazione dei dati gestite dall’utente corrente. Oracle
Server garantisce che vi sia uniformità di lettura in modo che
tutti gli utenti visualizzino lo stato dei dati al momento dell’ultimo
commit.
Le righe interessate dall’operazione sono bloccate e gli altri
utenti non possono modificare i dati in esse contenuti.
Le modifiche apportate ai dati diventano
permanenti nel database.
Non è possibile ripristinare lo stato precedente
dei dati.
Tutti gli utenti possono visualizzare lo stato
della transazione.
Le righe interessate dall’operazione vengono
sbloccate e possono essere modificate di
nuovo da altri utenti.
Tutti i savepoint vengono cancellati.
89 89
90 90
Stato dei dati dopo l’esecuzione di
ROLLBACK
Utilizzare l’istruzione ROLLBACK per annullare tutte le
modifiche non ancora permanenti.
Le modifiche apportate vengono annullate.
Viene ripristinato lo stato precedente dei dati.
Le righe interessate dall’operazione vengono sbloccate.
SQL> DELETE FROM
14 righe eliminate.
SQL> ROLLBACK;
Rollback completato.
Rollback delle modifiche in
corrispondenza di un contrassegno
Utilizzare l’istruzione ROLLBACK TO SAVEPOINT per
eseguire il rollback delle modifiche apportate fino a quel
contrassegno.
Inserire un contrassegno nella transazione corrente
tramite l’istruzione SAVEPOINT.
SQL> UPDATE …
SQL>SAVEPOINT update_done;
Savepoint creato.
SQL>INSERT …
SQL>ROLLBACK TO update_done;
Rollback completato
impiegati;
91 91
92 92
Lock
I lock di Oracle:
Impediscono il verificarsi di interazioni conflittuali tra transazioni
simultanee;
Non richiedono l’intervento dell’utente;
Utilizzano automaticamente il livello più basso di limitazione;
Sono validi solo per la durata della transazione:
Sono disponibili in due modalità:
- lock esclusivo impedisce la condivisione di una risorsa. La prima
transazione che applica un lock esclusivo a una risorsa è la sola in
grado di modificarla finchè il lock non viene rilasciato;
- lock di condivisione consente la condivisione di una risorsa.
E’ possibile condividere dati tra più utenti che vi accedono in lettura
applicando lock condivisi che impediscano la modifica simultanea
dei dati (operazione per cui è necessario un lock esclusivo). La
stessa
risorsa accetta blocchi condivisi da più transazioni.
Creazione e gestione di
tabelle
93 93
94 94
Convenzioni per la denominazione
Oggetti di database
Oggetto
Descrizione
Tabella
Unità di memorizzazione di base,
composta da righe e colonne.
Vista
Dal punto di vista logico rappresenta set
secondari di dati da una o più tabelle.
Sequenza
Genera valori di chiave primaria.
Indice
Migliora le prestazioni di alcune query.
Sinonimo
Assegna nomi alternativi agli oggetti.
95 95
Per assegnare nomi alle colonne e alle tabelle dei database è necessario rispettare
le
seguenti convenzioni standard per la denominazione degli oggetti di database di
Oracle:
Il primo carattere dei nomi di tabelle e colonne deve essere una lettera e la
lunghezza dei nomi deve essere compresa tra 1 e 30 caratteri;
I nomi possono essere composti solo dai caratteri A – Z, a – z,
0 – 9, _ (sottolineatura), $ e # (caratteri legali, di cui si sconsiglia tuttavia
l’utilizzo);
Non è possibile assegnare un nome uguale a due oggetti di proprietà dello
stesso utente di Oracle Server;
I nomi non possono essere parole chiavi di Oracle Server;
Utilizzare nomi descrittivi per le tabelle e gli altri oggetti di database;
Assegnare lo stesso nome a un oggetto che compare in più tabelle. La colonna
contenente il numero di dipartimento, ad esempio, è denominata
COD_DIPARTIMENTO sia nella tabella IMPIEGATI sia nella tabella
DIPARTIMENTI.
96 96
Istruzione CREATE TABLE
Riferimenti a tabelle di altri utenti
È necessario disporre di:
- un privilegio CREATE TABLE
- un’area di memorizzazione
CREATE [GLOBAL TEMPORARY] TABLE [schema.]tabella
(colonna tipodati [DEFAULT espr] [, …]) ;
È necessario specificare :
- il nome della tabella
- il nome, il tipo di dati e le dimensioni della
colonna.
97 97
98 98
Tabelle nei database Oracle
Creazione di tabelle
Creare una tabella.
SQL> CREATE TABLE dipartimenti
2
(cod_dipartimento
NUMBER(2),
3
nome_dipartimento VARCHAR2(14),
4
localita
VARCHAR2(13));
Confermare la creazione della tabella.
SQL> DESC[RIBE] dipartimenti
Name
-----------------------------COD_DIPARTIMENTO
NOME_DIPARTIMENTO
LOCALITA
Null? Type
------- ----------NUMBER(2)
VARCHAR2(14)
VARCHAR2(13)
Uno schema è un insieme di oggetti. Gli
oggetti dello schema costituiscono le strutture
logiche che fanno direttamente riferimento ai
dati contenuti in un database e comprendono
tabelle, viste, sinonimi, sequenze, stored
procedure, indici, cluster e collegamenti a
database.
Le tabelle di proprietà di altri utenti non fanno
parte dello schema del proprietario.
È necessario far precedere il nome della
tabella dal nome del proprietario.
99 99
Tabelle dell’utente
- insieme di tabelle create e gestite dall’utente
- contengono informazioni relative all’utente
Dizionario dati
- insieme di tabelle create e gestite da Oracle Server
- contengono informazioni relative al database
- le tabelle del dizionario dati sono di proprietà dell’utente SYS
- le viste del dizionario dati si suddividono in quattro categorie, ognuna delle
quali dispone di un prefisso distinto che ne riflette la funzione
Prefisso
Descrizione
USER_
Queste viste contengono informazioni sull’oggetto di proprietà dell’utente.
ALL_
Queste viste contengono informazioni su tutte le tabelle (Object Table e
tabelle relazionali) accessibili all’utente.
DBA_
Queste viste sono limitate e sono accessibili solo agli utenti a cui è stato
assegnato il ruolo di amministratore del database.
V$_
Queste viste contengono informazioni sulle viste delle prestazioni
dinamiche, sulle prestazioni del database server e sui lock.
100100
Tipi di dati
Creazione di una tabella tramite una subquery
Tipi di dati
Descrizione
VARCHAR2
(dimensione)
Dati di tipo carattere a lunghezza variabile (è necessario specificare una
dimensione massima: la dimensione minima e predefinita è 1, la dimensione
massima è 4000)
Dati di tipo carattere a lunghezza fissa con la lunghezza in byte pari a dimensione
(è necessario specificare una dimensione massima: la dimensione minima e
predefinita è 1, la dimensione massima è 2000)
CHAR
(dimensione)
NUMBER(p,s
)
Numero con precisione p e scala s (la precisione corrisponde al numero totale di
cifre decimali e la scala corrisponde al numero di cifre a destra del separatore
decimale. Il valore della precisione può essere compreso tra 1 e 38, mentre
quello della scala tra -84 e 127)
DATE
LONG
Valori di data e ora compresi tra il 1° gennaio 4 712 a.C. e il 31 dicembre 9999
d.C.
Dati di tipo carattere a lunghezza variabile fino a un massimo di 2 GB
CLOB
Dati di tipo carattere a byte singolo fino a un massimo di 4 GB
RAW
(dimensione)
Dati di tipo RAW con la lunghezza pari a dimensione (è necessario specificare
una dimensione massima: la dimensione massima è 2000)
LONG RAW
Dati di tipo RAW a lunghezza variabile fino a un massimo di 2 GB
BLOB
Dati binari fino a un massimo di 4 GB
BFILE
Dati binari memorizzati in un file esterno fino a un massimo di 4 GB
CREATE TABLE table
[(colonna, colonna …)]
AS subquery ;
102102
Istruzione ALTER TABLE
ALTER TABLE tabella
DROP UNUSED COLUMNS;
Eliminazione di una tabella
ALTER TABLE tabella
DROP COLUMN colonna ;
ALTER TABLE tabella
SET UNUSED (colonna);
OR
ALTER TABLE tabella
SET UNUSED COLUMN colonna;
Il numero di colonne specificato deve corrispondere al numero di
colonne della subquery.
Definire le colonne assegnandovi un nome e valori predefiniti.
La tabella verrà creata con i nomi di colonna specificati e le righe
recuperate tramite l’istruzione SELECT verranno inserite nella tabella.
La definizione di colonna può contenere solo il nome di colonna e il
valore predefinito.
Se i valori della colonna vengono specificati, il numero di colonne deve
corrispondere a quello indicato nella lista dopo l’istruzione SELECT
della subquery.
Se i valori della colonna non vengono specificati, i nomi di colonna
della tabella saranno uguali ai nomi di colonna indicati nella subquery.
101101
Utilizzare l’istruzione ALTER TABLE per:
Aggiungere una nuova colonna utilizzando la clausola ADD, la nuova colonna
diventa l’ultima colonna;
Modificare una colonna esistente o definire un valore predefinito utilizzando la
clausola MODIFY, la modifica del valore predefinito ha effetto solo sulle
aggiunte effettuate dopo la modifica;
Eliminare le colonne non più necessarie dalla tabella utilizzando la clausola
DROP COLUMN, è irrilevante che le colonne contengano dati o meno, è
possibile eliminare solo una colonna alla volta, dopo la modifica la tabella deve
contenere almeno una colonna, non è possibile recuperare le colonne eliminate;
Contrassegnare una o più colonne che non vengono utilizzate utilizzando la
clausola SET UNUSED;
Eliminare le colonne contrassegnate come UNUSED utilizzando la clausola
DROP UNUSED.
ALTER TABLE table
ADD/MODIFY (colonna tipodati [DEFAULT
espr]
[, colonna tipodati]…) ;
Creare una tabella e inserire nuove righe tramite la combinazione
dell’istruzione CREATE TABLE e l’opzione AS subquery.
103103
Tutti i dati e la struttura della tabella vengono
eliminati.
Tutte le transazioni in sospeso vengono rese
permanenti.
Tutti gli indici vengono eliminati.
Le viste e i sinonimi continuano a essere
memorizzati, ma non sono più validi.
Solo l’autore della tabella o gli utenti che dispongono
del privilegio DROP ANY TABLE possono eliminare
una tabella.
TABLE eseguire
tabella ; il rollback di questa
NonDROP
è possibile
104104
istruzione.
Troncamento di una tabella
Modifica del nome di un oggetto
L’istruzione TRUNCATE TABLE consente di:
- eliminare tutte le righe da una tabella;
- liberare lo spazio di memorizzazione utilizzato dalla
tabella.
Se si utilizza TRUNCATE, non è possibile effettuare il
rollback dell’eliminazione delle righe.
In alternativa, è possibile eliminare le righe tramite
l’istruzione DELETE, ma in tal caso non libera spazio di
memorizzazione.
Per troncare una tabella è necessario essere proprietari
o disporre dei privilegi di sistema.
L’istruzione
RENAME consente di
modificare il nome di tabelle, viste,
sequenze o sinonimi.
TRUNCATE TABLE tabella
;
RENAME nome_precedente TO
nome_nuovo
È
necessario essere proprietari
dell’oggetto.
105105
106106
Aggiunta di commenti ad una tabella
Per aggiungere commenti a una tabella o a una
colonna, utilizzare l’istruzione COMMENT.
COMMENT ON TABLE tabella | COLUMN
tabella.colonna IS ‘ testo ’ ;
Per eliminare un commento dal database, sostituire il
teso con una stringa vuota ( ‘ ’ ).
È possibile visualizzare i commenti tramite le viste del
dizionario dati:
• ALL_COL_COMMENTS
• USER_ COL_COMMENTS
• ALL_TAB_ COMMENTS
• USER_TAB_COMMENT
Inclusione di vincoli
107107
108108
Definizione dei vincoli
Istruzioni per l’utilizzo dei vincoli
I vincoli applicano le regole a livello di tabella.
I vincoli impediscono la cancellazione di una tabella
in caso di dipendenze.
In Oracle è possibile utilizzare i seguenti tipi di
vincoli:
Vincolo
Descrizione
NOT NULL
Indica che la colonna non può contenere valori
nulli
Indica una colonna o una combinazione di
UNIQUE
colonne i cui valori devono essere univoci per tutte
le regole della tabella
PRIMARY KEY
Identifica in modo univoco ogni riga della tabella
FOREIGN KEY
Definisce e applica una relazione di chiave
esterna tra la colonna e una colonna della tabella
di riferimento
Indica
una condizione che deve risultare vera
CHECK
Denominare un vincolo oppure Oracle Server genererà
un nome utilizzando il formato SYS_Cn.
Creare un vincolo:
- contemporaneamente alla creazione della tabella;
- dopo che la tabella è stata creata.
Definire un vincolo a livello di colonna o di tabella
Visualizzare un vincolo nel dizionario dati consultando
la tabella USER_CONSTRAINTS.
Visualizzare le colonne associate ai nomi dei vincoli
nella vista USER_CONS_COLUMNS.
109109
Definizione di vincoli
Parole chiave del vincolo
FOREIGN KEY
CREATE TABLE [schema.]tabella
(colonna tipodati [DEFAULT espr]
[vincolo_tabella] [, …] );
I vincoli in genere sono creati contemporaneamente alla tabella. È comunque possibile
aggiungerli alla tabella dopo che è stata creata e anche disabilitarli temporaneamente.
I vincoli possono essere definiti a uno dei due livelli:
Livello di vincolo
Descrizione
Colonna
Fa riferimento ad una singola colonna e viene definito all’interno di una specifica per
la colonna di proprietà; può definire qualsiasi tipo di integrità.
Tabella
Fa riferimento a una o più colonne e viene definita separatamente dalle definizioni
delle colonne nella tabella; può definire qualsiasi vincolo ad eccezione di NOT NULL.
Livello del vincolo di colonna
Livello del vincolo di tabella
column [CONSTRAINT nome_vincolo] tipo_vincolo,
colonna, …
[CONSTRAINT nome_vincolo] tipo_vincolo
(colonna, …),
110110
111111
La chiave esterna è definita nella tabella figlia, mentre la tabella
contenente la colonna a cui viene fatto riferimento è la tabella
padre. La chiave esterna viene definita mediante una
combinazione
delle seguenti parole chiavi:
FOREIGN KEY: definisce la colonna nella tabella figlia a livello
del vincolo di tabella.
REFERENCE: identifica la tabella e la colonna nella tabella
padre.
ON DELETE CASCADE:consente di effettuare cancellazioni
nella tabella padre e la cancellazione di righe dipendenti nella
tabella figlia, senza questa opzione la riga nella tabella padre
non può essere cancellata se nella tabella figlia viene fatto
112112
riferimento a essa.
Istruzioni con i vincoli
Vincolo CHECK
Definisce una condizione che ogni riga deve soddisfare.
Espressioni non consentite:
- riferimenti a pseudocolonne CURRVAL, NEXTVAL, LEVEL e
ROWNUM;
- chiamate a funzioni SYSDATE, UID, USER e USERENV;
- query che fanno riferimento ad altri valori in altre righe.
Una colonna singola può avere più vincoli di CHECK che fanno
riferimento alla colonna nella sua definizione. Il numero di vincoli
CHECK che è possibile definire in una colonna è illimitato.
È possibile definire vincoli CHECK a livello di colonna o a livello di
tabella.
… , cod_dipartimento NUMBER(2),
CONSTRAINT imp_cod_dipartimento_ck
CHECK (COD_DIPARTIMENTO BETWEEN 10 AND 99) , 113
113
…
È possibile aggiungere, cancellare,abilitare o disabilitare un
vincolo, ma non è possibile modificarne la struttura.
È possibile aggiungere un vincolo NOT NULL a una colonna
esistente mediante la clausola MODIFY dell’istruzione ALTER
TABLE, è possibile definire una colonna NOT NULL solo se la
tabella non contiene righe, poiché non è possibile specificare
dati per righe esistenti contemporaneamente all’aggiunta della
colonna.
AGGIUNTA DI UN VINCOLO:
CANCELLARE UN VINCOLO:
ALTER TABLE tabella
ADD [CONSTRAINT vincolo] tipo (colonna)
;
ALTER TABLE tabella
DROP CONSTRAINT nome_vincolo ;
DISABILITARE UN VINCOLO:
ABILITARE UN VINCOLO:
ALTER TABLE tabella
DISABLE CONSTRAINT nome_vincolo ;
ALTER TABLE tabella
ENABLE CONSTRAINT nome_vincolo
;
114114
Vincoli con clausola CASCADE
CONSTRAINTS
La clausola CASCADE CONSTRAINTS è utilizzata
con la clausola DROP COLUMN.
Consente di cancellare tutti i vincoli di integrità
referenziale che fanno riferimento alle chiavi primarie
e univoche definite nelle colonne cancellate.
La clausola CASCADE CONSTRAINTS cancella
anche tutti i vincoli multicolonna definiti nelle colonne
cancellate.
Creazione di viste
ALTER TABLE tabella
DROP
nome_colonna CASCADE
CONSTRAINTS ;
115115
116116
Viste semplici e viste complesse
Finalità delle viste
Limitare l’accesso ai dati in quanto
consentono di visualizzare solo determinate
colonne della tabella.
Consentono agli utenti di eseguire query
semplici per recuperare i risultati di query più
complesse, ad esempio di eseguire query su
informazioni contenute in più tabelle anche
senza saper scrivere un’istruzione JOIN.
Garantiscono l’indipendenza dei dati per
utenti e programmi applicativi ad hoc. Una
sola vista può essere utilizzata per
recuperare dati da più tabelle.
Consentono a gruppi di utenti l’accesso ai
117117
dati secondo determinati criteri.
Le viste possono essere classificate in due tipi: semplici e complesse. La
differenza
fondamentale riguarda le operazioni DML (inserimento, aggiornamento ed
eliminazione).
Con vista semplice si intende una vista che:
- estrae i dati da una sola tabella;
- non contiene funzioni o gruppi di dati;
- può eseguire DML tramite la vista.
Con vista complessa si intende una vista che:
- estrae i dati da più tabelle;
- contiene funzioni o gruppi di dati;
- non sempre consente DML tramite la vista.
Caratteristica
Viste semplici
Numero di tabelle
Una
Viste complesse
Una o più
Contiene funzioni
No
Sì
Contiene gruppi di dati
No
Sì
DML tramite la vista
Sì
Non sempre
118118
Creazione di una vista
Incorporare una subquery nell’istruzione CREATE VIEW.
CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW vista
[(alias [, alias] …)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT vincolo ]]
[WITH READ ONLY] ;
La subquery che definisce una vista non può contenere una sintassi
SELECT complessa che include join, gruppi e subquery.
La subquery che definisce una vista non può contenere una clausola
ORDER BY. La clausola ORDER BY viene specificata quando si
recuperano dati dalla vista.
Se non si specifica un nome di vincolo per una vista creata con CHECK
OPTION, il sistema assegna un nome predefinito nel formato SYS_Cn.
Mediante la clausola WITH CHECK OPTION è possibile garantire che
un’operazione DML sulla vista rientri nel dominio della stessa.
È possibile utilizzare l’opzione OR REPLACE per modificare la
definizione della vista senza eliminarla e ricrearla o concedere di nuovo i
privilegi sugli oggetti.
119119
Modifica e rimozione di una vista
Si può modificare una vista mediante la clausola CREATE OR
REPLACE VIEW
Quando vengono assegnati gli alias di colonna nella clausola
CREATE VIEW bisogna tenere a mente che gli alias sono
elencati nella stessa sequenza delle colonne nella subquery.
Utilizzare la clausola DROP VIEW per rimuovere una vista.
L’istruzione rimuove la definizione della vista dal database. La
rimozione di viste non ha alcun effetto sulle tabelle sulle quali è
basata la vista. Le viste o le applicazioni basate su viste rimosse
non saranno più valide. Solo l’autore o un utente con privilegio
DROP ANY VIEW può rimuovere una vista.
SINTASSI:
DROP VIEW vista;
120120
Viste inline
Analisi “Top – N”
vista inline si intende una subquery con
un alias (nome di correlazione) che può
essere utilizzata in un’istruzione SQL.
L’utilizzo di una vista inline è simile a quello
di una subquery specifica nella clausola
FROM della query principale.
Una vista inline non è un oggetto di schema.
Le query “Top – N” sono utili nelle situazioni in
cui è necessario visualizzare solo gli n record
superiori o inferiori da una tabella in base ad
una condizione. Il set di dati restituito può
essere utilizzato per ulteriori analisi. I set dei
valori massimi e minimi sono considerati query
“Top – N”.
Con
121121
122122
Controllo dell’accesso degli
utenti
Le funzioni di protezione del database di
Oracle Server consentono di:
Controllare l’accesso al database;
Concedere l’accesso a oggetti specifici del
database;
Confermare i privilegi concessi e quelli
ricevuti con il dizionario dati Oracle;
Creare sinonimi per gli oggetti del
database.
Controllo dell’accesso degli
utenti
123123
124124
Privilegi
Privilegi di sistema
Protezione del database:
Privilegi di sistema: consentono l’accesso al
database.
I privilegi di sistema disponibili per utenti e ruoli sono più di
80. Vengono normalmente concessi dall’amministratore del
database.
Privilegi tipici dell’amministratore di sistema:
– Protezione di sistema
– Protezione dei dati
Privilegi sugli oggetti: consentono di manipolare
il contenuto degli oggetti del database
Schema: insieme di oggetti, come tabelle, viste
e sequenze.
Privilegi di sistema
Operazioni autorizzate
CREATE USER
Creazione utenti Oracle
DROP USER
Cancellazione utenti
DROP ANY TABLE
Cancellazione di tabelle da qualunque schema
BACKUP ANY
TABLE
Backup di tabelle in qualunque schema tramite la utility di
esportazione
125125
Privilegi di sistema degli utenti
Una volta creato un utente, l’amministratore
può concedergli privilegi di sistema specifici
GRANT privilegio [,privilegio…] TO utente [, utente]
Privilegi tipici dell’amministratore di sistema:
Privilegi di sistema
Operazioni autorizzate
CREATE SESSION
Connessione al database
CREATE TABLE
Creazione di tabelle nel proprio schema
CREATE SEQUENCE
Creazione di sequenze nel proprio schema
CREATE VIEW
Creazione di viste nel proprio schema
CREATE PROCEDURE
Creazione di stored procedure,stored function o
package nel proprio schema
126126
Definizione di ruolo e concessione di privilegi
Un ruolo è un gruppo specifico di privilegi correlati
che possono essere concessi agli utenti.
Un utente può avere accesso a diversi ruoli e più
utenti possono essere assegnati allo stesso ruolo.
Una volta creato il ruolo il DBA può utilizzare
l’istruzione GRANT per assegnargli utenti e
privilegi.
SQL> CREATE ROLE superiore;
Role created.
SQL> GRANT create table, create view TO superiore;
Grant succeded.
127127
SQL> GRANT superiore to BLAKE, CLARK;
Grant succeded.
128128
Privilegi sugli oggetti
Conferma dei privilegi concessi
Tabella del dizionario dati
Descrizione
ROLE_SYS_PRIVS
Privilegi di sistema concessi ai ruoli
ROLE_TAB_PRIVS
Privilegi sulle tabelle concesse ai ruoli
USER_ROLE_PRIVS
Ruoli accessibili da parte dell’utente
USER_TAB_PRIVS_MADE
Privilegi concessi sugli oggetti dell’utente
USER_TAB_PRIVS_RECD
Privilegi sugli oggetti concessi all’utente
USER_COL_PRIVS_MADE
Privilegi concessi sulle colonne degli
oggetti dell’utente
USER_COL_PRIVS_RECD
Privilegi sugli oggetti concessi all’utente
relativamente a colonne specifiche
I privilegi sugli oggetti variano da oggetto a
oggetto.
Il proprietario di un oggetto dispone di tutti i
privilegi sull’oggetto.
Un proprietario può concedere privilegi
specifici sull’oggetto.
GRANT privilegio_oggetto [(colonne)]
ON
oggetto
TO
{utente|ruolo|PUBLIC}
[WITH GRANT OPTION];
129129
130130
Creazione di utenti
Modalità di revoca dei privilegi
sugli oggetti
Per revocare i privilegi concessi agli altri utenti
utilizzare l’istruzione REVOKE.
Verranno revocati anche i privilegi concessi ad
altri mediante WITH GRANT OPTION.
REVOKE { privilegio [, privilegio …] | ALL}
ON
oggetto
FROM { utente [, utente …] | ruolo |PUBLIC}
[CASCADE CONSTRAINTS] ;
L’amministratore del database crea gli
utenti tramite l’istruzione CREATE USER.
CREATE USER utente
IDENTIFIED BY password ;
SQL> CREATE USER scott
2 IDENTIFIED BY tiger ;
User created.
131131
132132
Cambio della password
L’amministratore del database crea un
account per ogni singolo utente e ne
inizializza la password.
Gli utenti a loro volta possono cambiare la
password con l’istruzione ALTER USER.
SQL> ALTER USER scott
2 IDENTIFIED BY lion ;
User altered.
133133