Transcript SQL

SQL

Structured Query Language



Data Definition Language
Data Manipulation Language
Evoluzione



Sequel IBM (1974)
Standardizzazione ANSI/ISO: SQL-89, SQL2, …
Oracle SQL
SQL
1
Programma del corso

SQL







linguaggio di definizione dello schema di una base di dati;
specifica delle interrogazioni;
uso del linguaggio di interrogazione per la definizione dei dati;
comandi per il controllo e l’accesso ai dati;
interazione tra SQL ed i tradizionali linguaggi di
programmazione
PL/SQL
SQL*Plus
SQL
2
Terminologia SQL





Relazioni = Tabelle
Risultato di una interrogazione = Tabella
Tupla = Riga
Attributo = Colonna
Nessuna distinzione fra maiuscole e
minuscole (ad eccezione delle stringhe)
SQL
3
Esempio
INO
INOME
LAVORO
CAPO
DATA_ASS
STIPENDIO
7369
SMITH
IMPIEGATO
7499
ALLEN
7521
7902
17-12-80
800
20
VENDITORE
7698
20-2-81
1600
30
WARD
VENDITORE
7698
22-2-81
1250
30
7698
BLAKE
MANAGER
1-5-81
3850
30
7902
FORD
ANALISTA
3-12-81
3000
10
7566
DIPNO
Tabella
IMPIEGATI
DIPNO
DIPNOME
CITTA
LIVELLO
MINSAL
MAXSAL
10
MAGAZZINO
CHICAGO
1
700
1200
20
RICERCA
DALLAS
2
1201
1400
30
VENDITE
NEW YORK
3
1401
2000
4
2001
3000
40
MARKETING
BOSTON
5
3001
9999
Tabella
DIPARTIMENTO
Tabella
SALARI
Tipi di dati elementari



char (n)
varchar2(n)
number(o,d)






integer
decimal
smallint
real
date
long
SQL
5
Il valore null


null  0
null  ‘ ‘
SQL
6
Proprietà delle tabelle


L’ordine delle righe è irrilevante
Non esistono righe duplicate (possono
però apparire righe duplicate nella
risposta ad una query)
SQL
7
Select
select [distinct] <colonna/e>
from <tabella>
[where <condizione>]
[order by <colonna/e> [asc | desc] ];
SQL
8
Esempi: selezione di colonne



select CITTA, DIPNO from
DIPARTIMENTO;
select * from IMPIEGATI;
select INOME, DIPNO,
STIPENDIO*12 as SALARIO_ANNUO
from IMPIEGATI;
SQL
9
Funzioni numeriche







+, -, *, /, mod, power, sqrt
abs, ceil, floor, sign
cos, cosh, sin, sinh, tan, tanh
log, ln, exp
round, trunc
nvl
vsize
SQL
10
Funzioni su stringhe







||, concat
initcap, lower, upper
instr
substr, rtrim
length
lpad, rpad
soundex
SQL
11
Funzioni di data







add_months, months_between
greatest, least
last_day, next_day
new_time
round
trunc
to_char, to_date
SQL
12
Esempi: distinct e order by



select DIPNO from IMPIEGATI;
select distinct DIPNO from
IMPIEGATI;
select INOME, DIPNO, DATA_ASS
from IMPIEGATI order by DIPNO
[asc], DATA_ASS desc;
SQL
13
Esempi: selezione di tuple

select LAVORO, STIPENDIO from
IMPIEGATI
where (CAPO = 7698 or CAPO =
7566) and STIPENDIO > 1500;
SQL
14
Operatori nella clausola where



logici: and, or
di confronto: =, !=, <>, >, <, <=, >=
di appartenenza: in, not in


di valore nullo: is null, is not null


select * from DIPARTIMENTO where DIPNO in (20,
30);
select * from IMPIEGATI where CAPO is not null;
di rango: between … and …,
not between … and …

select INO, INOME, STIPENDIO from IMPIEGATI
where STIPENDIO between 1500 and 2500;
SQL
15
Funzione “like”



% carattere jolly
_ marcatore di posizione
Esempi



… where CITTA like '%YORK%'
… where CITTA not like '_A%'
… where CITTA like '%A%'
SQL
16
Funzioni di gruppo
Operano su un gruppo di righe calcolando un
singolo valore da un insieme di valori di una
colonna
 count: conta il numero di righe per una
colonna




select count(*) from IMPIEGATI;
select count(distinct LAVORO) from
IMPIEGATI;
select count(*) from IMPIEGATI where
LAVORO='VENDITORE';
conta anche eventuali valori null
SQL
17
Funzioni di gruppo (2)


max: calcola il massimo dei valori di una
colonna
min: calcola il minimo dei valori di una
colonna




select min(STIPENDIO), max(STIPENDIO) from
IMPIEGATI;
select max(STIPENDIO)-min(STIPENDIO) from
IMPIEGATI;
select max(CITTA) from DIPARTIMENTO;
ignorano le tuple che hanno valore null nella
colonna specificata
SQL
18
Funzioni di gruppo (3)


sum: calcola la somma dei valori di una
colonna
avg: calcola la media dei valori di una colonna




select sum(STIPENDIO) from IMPIEGATI where
DIPNO=30;
select avg(STIPENDIO) from IMPIEGATI where
LAVORO='VENDITORE';
ignorano le tuple che hanno valore null nella
colonna specificata
applicabili solo a dati numerici
SQL
19
Definizione dei dati
create table <nome_tabella> (
<colonna> <tipo_dati> [default]
[<vincoli_di_colonna>]
{, <colonna> <tipo_dati> [default]
[<vincoli_di_colonna>]}
{, <vincoli_di_tabella>}
);
SQL
20
Nomi di colonna e di tabella




devono iniziare con una lettera
possono contenere numeri e _
possono essere lunghi fino a 30
caratteri
i nomi di colonna devono essere unici
all’interno di una tabella
SQL
21
Esempio
create table IMPIEGATI (
INO number(4),
INOME varchar2(30),
LAVORO char(10),
CAPO number(4),
DATA_ASS date,
STIPENDIO number(7,2),
DIPNO number(2)
);
SQL
22
describe

per vedere la struttura di una tabella si
puo’ usare il comando
describe <nome_tabella>;
Esempio:
describe IMPIEGATI;
SQL
23
Vincoli
[constraint <nome_vincolo>]
primary key | unique | not null
SQL
24
not null

richiede che i valori dell’attributo
corrispondente siano diversi da null
create table IMPIEGATI (
INO number(4) not null,
INOME varchar2(30),
LAVORO char(10),
CAPO number(4),
DATA_ASS date,
STIPENDIO number(7,2),
DIPNO number(2)
);
SQL
25
unique

richiede che i valori dell’attributo corrispondente
siano tutti distinti (i valori null sono ammessi e
non violano tale vincolo)
create table IMPIEGATI (
INO number(4) not null unique ,
INOME varchar2(30)unique,
LAVORO char(10),
CAPO number(4),
DATA_ASS date,
STIPENDIO number(7,2),
DIPNO number(2)
);
SQL
26
primary key


definisce un identificatore unico per ogni
tupla
non ammette valori null
create table IMPIEGATI (
INO number(4) constraint PK_IMP primary key,
INOME varchar2(30) not null,
LAVORO char(10),
CAPO number(4),
DATA_ASS date,
STIPENDIO number(7,2),
DIPNO number(2)
);
SQL
27
Esempio
create table PROGETTO (
PNO number(3) constraint pk_prg primary
key,
PNOME varchar2(60) unique,
PMGR number(4) not null,
COMPONENTI number(5),
BUDGET number(8,2) not null,
PSTART date,
PEND date
);
SQL
28
default

consente di specificare un valore di
default da assegnare ad un attributo
quando ad esso non viene assegnato
alcun valore
PSTART date default (’01-JAN-01’),
SQL
29
Vincoli di tabella
I vincoli unique e primary key possono
essere riferiti a piu’ colonne.
In tal caso i vincoli devono essere definiti
dopo che sono state definite tutte le
colonne interessate
constraint DATE_DIVERSE unique(PSTART, PEND)
SQL
30
Checklist







Quali attributi delle tuple devono essere memorizzati?
Quali sono i tipi di dati degli attributi?
Puo’ essere usato varchar2 al posto di char?
Quali colonne costituiscono la chiave primaria?
Quali colonne non ammettono valori nulli?
Quali colonne non ammettono valori duplicati?
Ci sono valori default per certe colonne?
SQL
31