Upload
patrizio-campana
View
225
Download
1
Tags:
Embed Size (px)
Citation preview
SQL 1
SQL Structured Query Language
Data Definition Language Data Manipulation Language
Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89,
SQL-2, … Oracle SQL
SQL 2
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 3
Terminologia SQL
Relazioni = Tabelle Risultato di una interrogazione = Tabella Tupla = Riga Attributo = Colonna
Nessuna distinzione fra maiuscole e minuscole (ad eccezione delle stringhe)
EsempioINO INOME LAVORO CAPO DATA_ASS STIPENDIO DIPNO
7369 SMITH IMPIEGATO 7902 17-12-80 800 20
7499 ALLEN VENDITORE 7698 20-2-81 1600 30
7521 WARD VENDITORE 7698 22-2-81 1250 30
7698 BLAKE MANAGER 1-5-81 3850 30
7902 FORD ANALISTA 7566 3-12-81 3000 10
DIPNO DIPNOME CITTA
10 MAGAZZINO CHICAGO
20 RICERCA DALLAS
30 VENDITE NEW YORK
40 MARKETING BOSTON
LIVELLO MINSAL MAXSAL
1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
Tabella IMPIEGATI
TabellaDIPARTIMENTO
TabellaSALARI
SQL 5
Tipi di dati elementari char (n) varchar2(n) number(o,d)
integer decimal smallint real
date long
SQL 6
Il valore null null 0 null ‘ ‘
SQL 7
Proprietà delle tabelle L’ordine delle righe è irrilevante Non esistono righe duplicate
(possono però apparire righe duplicate nella risposta ad una query)
SQL 8
Select
select [distinct] <colonna/e> from <tabella>[where <condizione>][order by <colonna/e> [asc | desc]
];
SQL 9
Esempi: selezione di colonne select CITTA, DIPNO from DIPARTIMENTO;
select * from IMPIEGATI; select INOME, DIPNO, STIPENDIO*12 as SALARIO_ANNUO from IMPIEGATI;
SQL 10
Funzioni numeriche +, -, *, /, mod, power, sqrt abs, ceil, floor, sign cos, cosh, sin, sinh, tan, tanh log, ln, exp round, trunc nvl vsize
SQL 11
Funzioni su stringhe ||, concat initcap, lower, upper instr substr, rtrim length lpad, rpad soundex
SQL 12
Funzioni di data add_months, months_between greatest, least last_day, next_day new_time round trunc to_char, to_date
SQL 13
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 14
Esempi: selezione di tuple select LAVORO, STIPENDIO from IMPIEGATI
where (CAPO = 7698 or CAPO = 7566) and STIPENDIO > 1500;
SQL 15
Operatori nella clausola where
logici: and, or di confronto: =, !=, <>, >, <, <=, >= di appartenenza: in, not in
select * from DIPARTIMENTO where DIPNO in (20, 30);
di valore nullo: is null, is not null 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 16
Funzione “like” % carattere jolly _ marcatore di posizione Esempi
… where CITTA like '%YORK%' … where CITTA not like '_A%' … where CITTA like '%A%'
SQL 17
Funzioni di gruppoOperano 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 18
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 19
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 20
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 21
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 22
Esempiocreate 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 23
describe per vedere la struttura di una
tabella si puo’ usare il comando
describe <nome_tabella>;
Esempio: describe IMPIEGATI;
SQL 24
Vincoli
[constraint <nome_vincolo>] primary key | unique | not null
SQL 25
not null richiede che i valori dell’attributo
corrispondente siano diversi da nullcreate 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 26
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 27
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 28
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 29
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 30
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 31
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?