SQL Corso Base
SQL Corso Base
OVERVIEW............................................................................................................................................................1
IL MODELLO RELAZIONALE ..................................................................................................................................2
CHIAVI...........................................................................................................................................................4
NORMALIZZAZIONE DI TABELLE............................................................................................................................5
DATABASE PER GLI ESEMPI..................................................................................................................................7
SQL IN AMBIENTE ORACLE............................................................................................................................8
ORACLE SQL STATEMENTS ...............................................................................................................................9
ATTIVAZIONE DI SQL*PLUS.............................................................................................................................11
SINTASSI SQL IN SQL*PLUS...........................................................................................................................12
INTERROGAZIONE DEL DATABASE...........................................................................................................14
JOIN DI TABELLE.............................................................................................................................................15
TITOLI DELLE COLONNE....................................................................................................................................19
FUNZIONI ARITMETICHE....................................................................................................................................20
FUNZIONI DI MANIPOLAZIONE CARATTERI..............................................................................................................22
FUNZIONI DI CONVERSIONE................................................................................................................................24
INTERFACCIA SQL*PLUS...............................................................................................................................26
CARATTERISTICHE SQL*PLUS..........................................................................................................................27
EDITING DEL COMMAND-BUFFER .........................................................................................................................28
Direttiva LIST.................................................................................................................................................29
Direttiva CHANGE.........................................................................................................................................30
Direttiva APPEND.........................................................................................................................................31
Direttiva INPUT.............................................................................................................................................31
Direttiva DELETE..........................................................................................................................................33
Direttiva SAVE...............................................................................................................................................33
Direttiva GET.................................................................................................................................................34
Direttiva START.............................................................................................................................................34
VARIABILI DI SOSTITUZIONE...............................................................................................................................36
Direttive DEFINE e UNDEFINE...................................................................................................................38
Direttiva ACCEPT..........................................................................................................................................39
VALORIZZAZIONE NON INTERATTIVA DELLE VARIABILI.............................................................................................40
GESTIONE DEGLI ERRORI...................................................................................................................................41
CONNESSIONE AD UN ALTRO UTENTE...................................................................................................................42
ACCESSO AL SISTEMA OPERATIVO.......................................................................................................................43
QUERY CON FUNZIONI DI GRUPPO............................................................................................................45
QUERY-SELEZIONE CON RAGGRUPPAMENTO...........................................................................................................46
FUNZIONI DI GRUPPO........................................................................................................................................47
SUBQUERY...........................................................................................................................................................51
SUBQUERY.....................................................................................................................................................52
QUERY COORDINATE O CICLICHE.........................................................................................................................56
OPERATORE EXISTS.....................................................................................................................................57
UNION, INTERSECT, MINUS..................................................................................................................58
QUERY SU GERARCHIE..................................................................................................................................61
STRUTTURA GERARCHICA..................................................................................................................................62
TRATTAMENTO DELLE DATE......................................................................................................................71
GENERALITÀ..................................................................................................................................................72
EDITING DELLE DATE.......................................................................................................................................73
CALCOLI CON LE DATE.....................................................................................................................................75
FUNZIONI PER LE DATE.....................................................................................................................................76
DATE COME CARATTERI O NUMERI......................................................................................................................78
MANIPOLAZIONE DEI DATI..........................................................................................................................79
ASPETTI GENERALI ..........................................................................................................................................80
BLOCCHI PL/SQL.........................................................................................................................................82
UTILIZZO CONCORRENTE DEI DATI.......................................................................................................................83
GESTIONE TABELLE........................................................................................................................................85
ASPETTI GENERALI..........................................................................................................................................86
CREAZIONE DI UNA TABELLA.............................................................................................................................87
TIPI DI DATI PER LE COLONNE............................................................................................................................88
MODIFICA DI STRUTTURA DI UNA TABELLA...........................................................................................................90
INDICI...........................................................................................................................................................91
VIEWS....................................................................................................................................................................93
ASPETTI GENERALI..........................................................................................................................................94
ESEMPI DI VIEWS.............................................................................................................................................95
AGGIORNAMENTI MEDIANTE VIEWS......................................................................................................................97
SECURITY DEI DATI.......................................................................................................................................100
ASSEGNAZIONE DEI GRANTS........................................................................................................................101
ANNULLAMENTO DEI GRANTS......................................................................................................................103
NOMI E SINONIMI..........................................................................................................................................103
ESERCIZI............................................................................................................................................................107
DATABASE PER GLI ESERCIZI............................................................................................................................108
ESERCIZI RELATIVI AI CAPITOLI 2/3/4/5/6..........................................................................................................110
ESERCIZI RELATIVI AI CAPITOLI 9/10/11............................................................................................................114
Overview
1
CAPITOLO
OVERVIEW
Il modello relazionale
Una relazione può essere ben rappresentata in una tabella in cui ogni riga
rappresenta una tupla; ogni riga inoltre risulta composta da n colonne.
INSIEMI
D1 D2 ………………… Dn
R1(D1…Dn) d11 d21 ………………… dn1
…… …………………
…… ………………… RELAZIONE
…… …………………
…… …………………
Una Chiave Candidata che non sia Chiave Primaria è detta CHIAVE
ALTERNATIVA.
Gli attributi di una tabella che sono Chiave Primaria in altre tabelle, sono
chiamati CHIAVE ESTERNA.
Overview
Normalizzazione di tabelle
Un campo (che non sia Chiave) deve dipendere da una chiave unica e
non da un sottoinsieme dei campi che compongono una chiave.
Esempio:
| Chiave |
| Chiave |
Una seconda tabella basata su due record che sono collegati sulla base
del contenuto del campo Magazzino, potrebbe, se richiesto, ricostruire
l’informazione.
Esempio:
| Chiave |
In questo caso il campo Posizione è funzione del campo Comparto che non
è un campo Chiave e quindi la tabella non è normalizzata.
| Chiave | | Chiave |
Overview
I dati presenti nelle due tabelle sono collegabili mediante i valori comuni
della colonna “DEPTNO”, presente in entrambe.
2
CAPITOLO
• Data Definition
CREATE TABLE Crea una nuova tabella
• Controllo accessi
GRANT Assegna dei privilegi a ruoli e/o utenti
Pre-requisiti:
Al terminale introdurre:
SQLPLUS (nome/password)
SQL>
EXIToppure QUIT
Comandi SQL:
;
oppure
RUN oppure /
Esempi:
SQL> /
Comandi SQL*Plus:
INTERROGAZIONE DEL
DATABASE
Join di tabelle
Esempio di Equi-Join:
Il join può essere eseguito anche su una unica tabella, (Self Join) purché
venga vista con due nomi differenti (alias) nella query.
Per ciascuna riga delle tabella, verranno esaminate tutte le righe della
tabella stessa.
Esempio:
come si chiamano i capi dei vari dipendenti
NOME_IMP NOME_MGR
--------------- -----------------
SMITH FORD
ALLEN BLAKE
WARD BLAKE
JONES KING
MARTIN BLAKE
BLAKE KING
CLARK KING
SCOTT JONES
TURNER BLAKE
..... ......
Esempio:
a quale livello retributivo appartiene ogni dipendente
Utilizza il simbolo (+) sulla colonna di join dove si permette che manchi la
corrispondenza.
Esempio:
Esempio:
Esempio:
6 records selected.
N.B. Questi titoli non possono essere usati al posto dei veri nomi colonna
nelle ‘WHERE’ o ‘ORDER BY’.
Funzioni aritmetiche
Esempio:
Esempio:
DEPTNO DEPARTMENT
----------- ---------------------
10 ACCOUNTING New York
20 RESEARCH Dallas
30 SALES Chicago
40 OPERATIONS Boston
Funzioni di conversione
DECODE(e,v1,d1 [,v2,d2] ...[,def])
Esempi:
SELECT ename, job
DECODE(job,’SALESMAN’,100,’ANALYST’,200,300)
JOB_CODE
FROM emp;
INTERFACCIA SQL*Plus
26
Infertaccia SQL*Plus
Caratteristiche SQL*Plus
• Istruzioni SQL;
Una linea diventa corrente quando viene evidenziata, come unica o ultima
linea, da una “LIST”.
28
Infertaccia SQL*Plus
Direttiva LIST
Esempi:
SQL>L
SELECT deptno, ename, sal
FROM emp
* WHERE deptno = 10
SQL>L1
* SELECT deptno, ename, sal
Formato:
Esempio:
SQL>L1
* SELECT dptno, ename, sal
SQL> c/dptno/deptno/
* SELECT deptno, ename, sal
Nel caso in cui il testo da cambiare contenga il carattere “/” si può usare
come separatore un qualsiasi carattere speciale non presente nel testo
medesimo.
30
Infertaccia SQL*Plus
Direttiva APPEND
Formato:
Esempio:
SQL> L1
* SELECT deptno, ename, sal
SQL> a ,comm
* SELECT deptno, ename, sal, comm
Direttiva INPUT
Formato:
Esempio:
SQL> L last
* WHERE deptno = 10
SQL> i
* ORDER BY sal
← Una linea vuota termina l’input del testo
SQL> r
SELECT deptno, ename, sal, comm
FROM emp
WHERE deptno = 10
* ORDER BY sal
32
Infertaccia SQL*Plus
Direttiva DELETE
Formato:
Esempio:
SQL> L last
* ORDER BY sal
SQL> L *
* ORDER BY sal
SQL> del
SQL> l
SELECT deptno, ename, sal, comm
FROM emp
* WHERE deptno = 10
Direttiva SAVE
Formato:
Direttiva GET
Formato:
Direttiva START
Formato:
Il file richiamato potrà essere stato creato anche con un text editor
esterno, cosa senz’altro necessaria se contiene direttive SQL*Plus.
34
Infertaccia SQL*Plus
36
Infertaccia SQL*Plus
UNDEFINE nome-variabile
Esempio:
SQL> DEF deptnum=10
SQL> /
38
Infertaccia SQL*Plus
Direttiva ACCEPT
Formato:
Esempio:
file richiamato con una “START”
output prodotto:
Inserire N. Dipartimento: 10
EMPNO ENAME
------ ----------
7782 CLARK
7839 KING
7934 MILLER
Valorizzazione non interattiva delle variabili
In tal caso, i nomi delle variabili devono essere costituiti dal prefisso “&” e
da un numero progressivo, poiché il meccanismo di sostituzione diventa
posizionale.
In questo caso il file eseguito deve contenere nella prima riga la stringa
“utente/password” e la direttiva “EXIT” nell’ultima riga.
Esempio:
dato il file “rep1.sql” contenente
SCOTT/TIGER
40
Infertaccia SQL*Plus
Esempio:
WHENEVER SQLERROR
CONNECT username/password
Esempio:
42
Infertaccia SQL*Plus
HOST comando-sistema
Esempio (Unix):
abcd.sql
Per quanto riguarda l’uso di un text editor esterno, si può anche utilizzare
un’apposita direttiva di SQL*Plus:
ED [nome-file]
5
CAPITOLO
45
Realizzato da D&T
Query con funzioni di gruppo
46
Realizzato da D&T
Query con funzioni di gruppo
Funzioni di gruppo
Esempi:
47
Realizzato da D&T
Query con funzioni di gruppo
48
Realizzato da D&T
Query con funzioni di gruppo
DEPTNO JOBS
----------- --------
10 3
20 3
30 3
Esempio:
totale compensi per dipartimento
DEPTNO COMPENSI
------ ----------
10 8750
20 10875
30 11600
49
Realizzato da D&T
Query con funzioni di gruppo
30 SALESMAN 1400
Ad esempio:
50
Realizzato da D&T
6
CAPITOLO
SUBQUERY
Subquery
Subquery
Esempio:
visualizzare il nome degli impiegati che hanno la stessa mansione di
‘JONES’;
ENAME JOB
------ ---------
JONES MANAGER
BLAKE MANAGER
CLARK MANAGER
ENAME JOB
---------- --------------
SCOTT ANALYST
FORD ANALYST
SMITH CLERK
MILLER CLERK
ADAMS CLERK
JAMES CLERK
JONES MANAGER
BLAKE MANAGER
CLARK MANAGER
Esempio:
visualizzare chi svolge la stessa mansione e lavora nello stesso
dipartimento di ‘ALLEN’
Si possono avere più subquery allo stesso livello rispetto alla query
principale, combinati in ‘OR’ o in ‘AND’, con altre eventuali clausole della
‘WHERE’
Esempio:
ENAME JOB
--------- ---------------
JONES MANAGER
BLAKE MANAGER
CLARK MANAGER
SCOTT ANALYST
KING PRESIDENT
FORD ANALYST
Esempio:
ENAME JOB
---------- --------------
MILLER CLERK
CLARK MANAGER
Subquery
Esempio:
visualizzare i dati degli impiegati che percepiscono uno
stipendio superiore allo stipendio medio del loro dipartimento
Esempi:
1. Visualizzare i dati di coloro che lavorano in un dipartimento dove è
presente qualche analista.
2. Visualizzare i dati di coloro che sono stati assunti prima del loro capo
La ‘ORDER BY’ può essere specificata solo per il risultato globale e non
per le ‘SELECT’ componenti. Occorre indicare il numero colonna, poiché i
nomi delle colonne omologhe nelle singole ‘SELECT’ possono essere
differenti.
Esempi:
2. Verificare in quali anni sono stati assunti sia analisti che venditori.
ANNO_ASS
--------------
1981
Subquery
DEPTNO
-----------
40
7
CAPITOLO
QUERY SU GERARCHIE
Struttura gerarchica
Esempio:
gerarchia TOP-DOWN
2- FROM .........
5- [ ORDER BY .. ]
27-OCT-90
TO_CHAR(data, ‘formato’)
Caratteri Significato
----------- -----------------------------------------
CC o SCC Secolo – Secolo con segno
MI Minuti
SS Secondi
SSSSS Secondi da mezzanotte (0 - 86399)
Nel formato si possono inserire, come parti costanti, tutti i caratteri non
usati come caratteri di edizione (es. spazi, trattini, slash, ecc.),
eventualmente racchiusi tra “ “ per evitare interferenze.
Esempi:
SQL> COLUMN DATA_ASS FORMAT A10
SQL> COLUMN GIORNO_ORA FORMAT A20
SQL> COLUMN TRIM_SETT FORMAT A10
SQL>
SQL> SELECT ename,
TO_CHAR(hiredate, ’DD/MM/YY’) DATA_ASS,
TO_CHAR(hiredate, ’Day - HH24:MM’) GIORNO_ORA,
TO_CHAR(hiredate, ’Q - WW’) TRIM_SETT
FROM emp
WHERE deptno = 10;
ANNO_ASS NUMERO_ASS
-------- -----------
1980 1
1981 10
1986 3
Calcoli con le date
Esempio:
Esempio:
SQL>SELECT ename,
TRUNC(hiredate+90) - TRUNC(SYSDATE)GIORNI_RESIDUI
FROM emp
WHERE hiredate+90 > SYSDATE;
ENAME GIORNI_RESIDUI
------ ----------------------
SCOTT 1
ADAMS 35
MILLER 88
Date come caratteri o numeri
Qualora una data fosse memorizzata in una colonna di tipo carattere o
numerico, è possibile beneficiare di quanto visto per la manipolazione
delle date, purché la colonna venga convertita al formato “DATE” con la
funzione:
Dove ‘formato’ usa gli stessi caratteri di editing visti per la “TO_CHAR”,
ma allo scopo di specificare come deve essere interpretato il contenuto
del dato numerico o stringa per trasformarlo in data.
Esempio:
DATA1 DATA2
--------------- ---------------
06-OCT-90 20-OCT-90
SQL>SELECT
TO_DATE(‘901020’,‘YYMMDD’) - TO_DATE
(10199006,’MMYYYYDD’) DG
FROM dual;
DG
----
14
SQL>SELECT
TO_CHAR(TO_DATE(10199006, ‘MMYYYYDD’),
‘DD-MM-YYYY’) DATA1
FROM dual;
DATA1
----------
06-10-1990
9
CAPITOLO
COMMIT
ROLLBACK
SAVEPOINT nome-savepoint
Si potrà ritornare al punto in cui era stata eseguita una tale “SAVEPOINT”
con un’istruzione:
SQL> DECLARE
avg_sal NUMBER(7,2);
BEGIN
SELECT avg(sal) INTO avg_sal FROM emp
WHERE job <> ‘PRESIDENT’;
IF avg_sal < 3000 THEN
UPDATE emp SET sal = sal + 50
WHERE job <> ‘PRESIDENT’;
INSERT INTO sal_history(avg_date,
avg_value)
SELECT sysdate, avg(sal)
FROM emp
GROUP BY sysdate;
ELSE
INSERT INTO sal_history(avg_date,
avg_value)
VALUES (sysdate, avg_sal);
END IF;
COMMIT;
END;
.
SQL> /
PL/SQL procedure successfully completed.
Utilizzo concorrente dei dati
Nel caso 1. si può effettuare una “SELECT” delle righe interessate con la
speciale clausola
“FOR UPDATE”.
Ad esempio:
GESTIONE TABELLE
Aspetti generali
Una volta creata, una tabella è visibile e manipolabile solo dall’utente che
l’ha creata, il quale , tuttavia può concedere ad altri utenti specifici diritti
di accesso (GRANTS).
Chi accede ad una tabella altrui, deve far precedere il nome del
proprietario al nome della tabella, ad esempio:
I nomi delle tabella e colonna devono iniziare con una lettera alfabetica e
possono contenere lettere, numeri ed i segni “$” e “_”.
Gli stessi nomi di tabella possono essere usati da utenti diversi e gli stessi
nomi colonna in tabelle diverse, anche del medesimo utente.
Esempio:
Table created.
Tipi di dati per le colonne
Long row 2Gbyte Raw binary data di lunghezza variabile fino a 2 Gbyte
Al momento della creazione della tabella, Oracle accetta anche tutti i tipi
di dato previsti dallo standard SQL e da DB2 (es. NUMERIC, DECIMAL,
FLOAT, ecc. ) salvo convertirli comunque nei formati sopra indicati.
Quando una tabella è già stata creata e caricata con i dati, si può
comunque modificarne alcuni aspetti di struttura con l’istruzione “ALTER
TABLE”.
Esempi:
Si possono creare più indici sulla stessa tabella per ottimizzare differenti
tipi di ricerche ( es. su “EMPNO” e su “ENAME”).
Esempi:
Esempi:
SQL>SELECT * FROM emp WHERE empno > 7300 (Usa indice
IXEMP01)
VIEWS
Aspetti generali
View created.
View created
DEPTNO DEPT_AVG_SAL
----------- ---------------------
10 2917
20 2175
30 1567
View created.
NOME MANSIONE
------- ---------
ALLEN SALESMAN
FORD ANALYST
MARTIN SALESMAN
SCOTT ANALYST
TURNER SALESMAN
WARD SALESMAN
View created.
Esempio:
UPDATE emp10
SET JOB = ‘CLERK’
WHERE ENAME = ‘MILLER’
Esempio:
Vogliamo permettere ad un altro utente la visibilità delle colonne definite
nella vista V1, ma l’ aggiornamento della sola colonna JOB.
connect capo_scott/<password>@<alias_tnsnames.ora>
1 row updated.
L’utente che crea una tabella o una view, ne diviene il Proprietario a tutti
gli effetti, nel senso che a lui solo è possibile manipolarne i dati o la
struttura.
Al tentativo di accedere ad una risorsa per la quale non si hanno diritti ,
Oracle risponde con un messaggio di errore del tipo:
GRANT tipo-operazione
ON nome_tabella| nome view
TO nome-utente
SELECT
INSERT
UPDATE
DELETE
ALTER (solo per le tabelle)
INDEX (solo per le tabelle)
REFERENCES (solo per le tabelle)
SQL>GRANT ALL
ON projects
TO adams;
SQL>GRANT ALL
ON projects
TO PUBLIC;
SQL>GRANT SELECT
ON projects
TO adams
WITH GRANT OPTION;
Annullamento dei GRANTS
REVOKE tipo-operazione
ON nome_tabella| nome view
FROM nome-utente
Esempio:
Nomi e sinonimi
L’utente che riceve diritti di accesso su tabelle altrui può definire propri
‘sinonimi’ per tali tabelle con l’istruzione:
ESERCIZI
Database per gli esercizi
PROJNO PNAME
------ ------------------
1 ORACLE
DEVELOPMENT
2 DOCUMENTATION
3 CUSTOMER TRAINING
10 TESTING
20 INSTALLATION
30 QUALITY CONTROL
ENAME
------------
MARTIN
TURNER
ADAMS
SMITH
FORD
WARD
ENAME ISTOGRAM
------------ -----------------
SMITH *****
WARD ****
ADAMS *****
MARTIN ******
SEDE_DI_LAVORO
------------------------------
CLARK - NEW YORK
FORD – DALLAS
MARTIN – CHCAGO
13. Visualizzare per ogni dipartimento i progetti ad esso affidati e i nomi
dei dipendenti cui sono assegnati, ordinati per nome dipartimento.
Suggerimento: Si tratta di 3 Equi Join.
Esempio:
Esempio:
DEPTNO DNAME
----------- ------------------
40 OPERATIONS
Esempio:
NUMERO
--------------
10
20
30
Esercizi relativi ai capitoli 9/10/11
17. Creare una view che permetta di vedere gli stipendi medi pagati in
ciascun dipartimento.
Esempio:
DEPTNO SALMED
----------- --------------
10 2917
20 2175
30 1567