Escolar Documentos
Profissional Documentos
Cultura Documentos
Algebra Relazionale
suppliers(sid, sname, address)
parts(pid, pname, color)
catalog(sid, pid, cost)
trovare i nomi dei fornitori che forniscono
parti rosse
psname(psid(ppid(s color=red(parts))catalog)
suppliers)
1
Algebra Relazionale
trovare gli identificativi dei fornitori che forniscono
parti rosse o verdi
psid(ppid(s color = rosso color = verde(parts)) catalog)
trovare gli identificativi dei fornitori che forniscono
parti rosse oppure che stanno in piazza Garibaldi
(psid(ppid(s color = rosso(parts)) catalog))[(psid(s address
= p.zza Garibaldi(suppliers)))
Relational Algebra
trovare gli identificativi dei fornitori che forniscono
ogni parte
psid(catalog) - psid((psid(catalog) parts) catalog)
trovare gli identificativi dei pezzi forniti da almeno
due fornitori diversi
pR1.pid(s R1.pid=R2.pidR1.sidR2.sid
(r (R1,catalog)r (R2,catalog)))
3
Algebra Relazionale
trovare le coppie di identificativi di fornitori
tali che il primo ha almeno un pezzo con
prezzo maggiore del secondo
pR1.pid, R2.pid(s R1.pid=R2.pidR1.sidR2.sid
r1.cost>R2.cost
(r (R1,catalog)r (R2,catalog)))
schema di riferimento
flights(fnum, from, to, distance, departs,
arrive)
aircraft(aid, aname, cruisingrange)
certified(eid, aid)
employees(eid, ename, salary)
certified.eid
certified, aircraft
certified.aid = aircraft.aid and
aircraft.aname =Boeing
certified.ename
certified, aircraft, employees
certified.eid = aircraft.eid and
employees.eid = certified.eid and
aircraft.aname =Boeing
7
aircraft.aid
aircraft, flights
flights.to = NY and
flights.from = LA and
aircraft.cruisingrange >
flights.distance
8
10
e.eid
employees e
e.salary =(select max (e1.salary)
from employees e1)
11
SQL
Si consideri il seguente schema relazionale:
Emp(eid:integer, ename:string, age:integer,
salary:real)
Works(eid:integer, did:integer,
pct_time:integer)
Dept(did:integer, dname:string, budget:real,
managerid:integer)
12
SQL
Dare un esempio di chiave esterna che
coinvolge la relazione Dept
Lattributo did in Works si riferisce allattributo did in Dept
13
SQL
Si scrivano le istruzioni SQL per definire le
relazioni Emp, Works e Dept
Create table Emp (eid integer,
ename char(10),
age integer,
salary real,
primary key (eid))
14
SQL
create table Works (eid integer,
did integer,
pct_time integer,
primary key (eid, did),
foreign key (did) references Dept,
foreign key (eid) references Emp,
on delete cascade)
15
SQL
Create table Dept (did integer,
budget real,
managerid integer,
primary key (did),
foreign key (managerid) references Emp.eid,
on delete set null)
16
SQL
Definire Dept in modo che ogni dipartimento
abbia un manager
Create table Dept (did integer,
budget real,
managerid integer not null,
primary key (did),
foreign key (managerid) references Emp,
on delete set null)
17
SQL
In riferimento agli schemi di relazione
appena definiti, si esprima in SQL la
seguente interrogazione:
Trovare i nomi e let di tutti gli impiegati
che lavorano nel dipartimento 2
Select E.ename, E.age
From Emp E, works W1
Where E.eid=W1.eid and W1.did=2
18
SQL
In riferimento agli schemi di relazione
appena definiti, si esprima in SQL la
seguente interrogazione:
Trovare i nomi e let di tutti gli impiegati
che lavorano sia nel dipartimento 1 che nel
dipartimento 2
Select E.ename, E.age
From Emp E, works W1, Works W2
Where E.eid=W1.eid and W1.did= 1 and
E.eid=W2.eid and W2.did= 2
19
SQL
Si consideri il seguente schema di database:
Studente(snum, nome, et, anno)
Classe(nome, aula, ora, pid)
Iscritto(snum, nome)
Professore(pid, nome, did)
20
SQL
trovare nome ed et degli studenti iscritti al
corso di paleontologia
Select S.nome, S.et
From studente S, iscritto I
Where S.snum=I.snum
and I.nome=paleontologia
21
SQL
In alternativa:
Select studente.nome, studente.et
From studente S
Where S.snum in (select I.snum
from I
where I.nome=paleontologia)
22
SQL
Trovare i nomi di tutti gli studenti del primo
anno iscritti ad un corso tenuto dal prof.
Rossi
Select distinct S.nome
From
studente S, corso C, iscritto I, professore P
Where
S.snum=I.snum and I.nome=C.nome and
C.pid=P.pid and P.nome=Rossi and S.anno=1
23
SQL
Oppure
Select distinct S.nome
From
studente S
Where
S.anno=1 and S.snum in (select I.snum
from iscritto I
where I.nome in (select C.nome
from corso C
where C.pid in (select P.pid
from professore P
where P.nome = Rossi)))
24
SQL
Trovare let media degli studenti, suddivisi
per anno
Select
anno, avg(et)
From
studente S
Group by anno
25
SQL
Trovare gli studenti che non sono iscritti ad
alcun corso
Select S.nome
From studente S
Where S.snum not in (select I.snum
from iscritto I)
26
SQL
Trovare let degli studenti piu anziani che
sono iscritti al secondo anno oppure che
seguono un corso tenuto dal prof. Rossi
Select max(S.age)
From studente S
Where S.anno=2 or S.snum in (select I.snum
from iscritto I, corso C, Professore P
where I.nome=C.nome and C.pid=P.pid and
P.nome=Rossi)
27