20130221 GB les 3
Transcript of 20130221 GB les 3
relationele algebrarelationele calculus
Matthijs van [email protected]
2012-2013
Slides grotendeels door: Katrien Verbert
inhoud deze les
• Relationele algebra
• Relationele calculus– Tupel relationele calculus
– Domein relationele calculus
2
relationeel model?
3
relationeel model: herhaling
• relatie: een tabel met kolommen en rijen
• attribuut: een kolom van een relatie
• tupel: een rij van een relatie.
• domein: verzameling van toegelaten waarden voor 1 of meerdere attributen. Voorbeelden zijn “integers”, “strings”, “datum”, …
4
5
relationele vraagtalen
• vraagtaal (query language) = gegevensmanipulatietaal
• biedt functionaliteit voor– opvragen
– toevoegen
– verwijderen
– wijzigen
van gegevens
6
indeling van relationele vraagtalen
• Algebraïsche talen– steunen op relationele algebra
– gebruiken operatoren
– proceduraal; HOE
• Calculustalen– steunen op relationele calculus
– gebruiken formele beschrijving van gewenste info
• predikatenlogica
– declaratief; WAT
– 2 soorten: • tupel-calculus,
• domein-calculus
7
relationele algebra
8
relationele algebra
• verzamelingsoperatoren– unie, doorsnede, verschil, cartesisch product
• relationele operatoren– selectie, projectie, join, deling, hernoeming
• unaire of binaire operatoren
9
selectie
10
De selectie van tupels uit extensie r van relatie R onder formule Fis de verzameling van alle tupels uit r die voldoen aan F:F(r) = {t | t r t voldoet aan F}
selectie
<selectiecriterium>(R)
• selecteert een aantal tupels uit een extensie (= rijen uit een tabel)
• resultaat: – een relatie (tabel) met zelfde tupelschema
– deelverzameling van de oorspronkelijke extensie
• selectiecriterium F = (logische) formule– enkelvoudige formules: =, ≠, <, >, <=, >=
– meervoudige formules: logische operatoren , ,
11
voorbeelden
• DNO=4 (EMPLOYEE)
• SALARY > 30000 (EMPLOYEE)
• (DNO = 4 SALARY > 25000) v (DNO = 5 SALARY > 30000)(EMPLOYEE)
12
oefening: geef alle rode of groene boten
Reserves
Sailors
Boats
sid bid day
22 101 10/10/96 58 103 11/12/96
sid sname rating age
22 dustin 7 45.0
31 lubber 8 55.5 58 rusty 10 35.0
bid bname color 101 Interlake Blue 102 Interlake Red 103 Clipper Green 104 Marine Red
oplossing
(Boats' ' ' '
)color red color green
eigenschappen van selectie
• behoudt het schema
• (r) r; dus kardinaliteit stijgt niet: #((r)) ≤ #r
• samenstelling van selecties is commutatief– gevolg:
– C1 ( C2 (… ( Cn ( r ) ) )...) = C1 C2 ... Cn ( r )
15
projectie
16
projectie
– doel: een aantal kolommen uit een tabel halen
– resultaat: • verzameling tupels
• met attributen deelverzameling van attributen van oorspronkelijke tupels
• verbonden met deelverzameling X van het tupelschema
De projectie van een extensie r van relatie R op een attributenverzameling X isX(r) = { t | tupelschema van t is X en t’ r : t t’ }
<attributenlijst>(R)
17
eigenschappen van projectie
• # X ( r ) ≤ # r– reden: dubbelen worden verwijderd
– # X(r) = # r indien X een sleutel bevat
• X (Y ( r ) ) enkel gedefinieerd indien X Y – dus niet commutatief !!
• Idempotent – enkel allerlaatste (buitenste) projectie moet uitgevoerd worden :
– X1 ( X2 (… ( r ) )...) = X1 ( r )
18
samenstelling van uitdrukkingen
• samenstelling in 1 nieuwe uitdrukking
– vb. FNAME, LNAME, SALARY ( DNO = 5 ( EMPLOYEE ) )
• opeenvolgende berekeningen met expliciete benoeming van tussenresultaten
– DEP5_EMPS DNO=5 ( EMPLOYEE )
– RESULT FNAME, LNAME, SALARY (DEP5_EMPS)
• selectie en projectie commuteren indien de attributen in het selectiecriterium behoren tot de attributen waarop wordt geprojecteerd
– X ( F ( r ) ) = F ( X ( r ) ) indien F enkel attributen in X gebruikt
20
Find names of sailors who are younger than 50
Reserves
Sailors
Boats
sid bid day
22 101 10/10/96 58 103 11/12/96
sid sname rating age
22 dustin 7 45.0
31 lubber 8 55.5 58 rusty 10 35.0
bid bname color 101 Interlake Blue 102 Interlake Red 103 Clipper Green 104 Marine Red
Syntax
selectie: <criterium>(R)projectie: <attributen>(R)
Find names of sailors who are younger than 50
Reserves
Sailors
Boats
sid bid day
22 101 10/10/96 58 103 11/12/96
sid sname rating age
22 dustin 7 45.0
31 lubber 8 55.5 58 rusty 10 35.0
bid bname color 101 Interlake Blue 102 Interlake Red 103 Clipper Green 104 Marine Red
Oplossing
sname(age<50(Sailors))
hernoeming
– doel: wijziging van attribuutnamen– notatie: nieuwe namen tussen haakjes vermeld– voorbeeld:
RESULT(Firstname, Lastname, Salary) FNAME, LNAME, SALARY (DEP5_EMPS)
1. S(B1, B2,…, Bn) (R) relatie en attributen worden hernoemd2. S (R) alleen relatie wordt hernoemd3. (B1, B2,…, Bn) (R) alleen attributen worden hernoemd
23
– hernoeming kan ook met een (unaire) operator voorgesteld worden
(a) FNAME, LNAME, SALARY ( DNO = 5 (EMPLOYEE ) )
(b) zelfde met tussenresultaat en hernoeming van attributen
Unie , doorsnede , verschil \
– enkel toegelaten op vergelijkbare ("union compatible") relaties
– definitie
– schema-behoudend, op attribuutnamen na• afspraak: behoud attribuutnamen van 1-ste relatie
2 relaties R( A1,...,An) en S (B1,...,Bm) zijn vergelijkbaar als en slechts als
n = m (d.w.z. R en S hebben dezelfde graad)DOM (Ai) = DOM (Bi) voor 1 ≤ i ≤ n
25
RESULT RESULT1 RESULT2
26
27
Cartesisch product
• Zij gegeven de relaties – R ( A1,...,An )
– S ( B1,...,Bm )
– die niet noodzakelijk vergelijkbaar zijn
• Q = R S – heeft schema Q(A1,...,An,B1,...,Bm)
– en bevat elke combinatie van tupels uit R en S
28
Cartesisch product: voorbeeld
R1 S1
R1 X S1 =
sid sname rating age
22 dustin 7 45.0
31 lubber 8 55.5 58 rusty 10 35.0
sid bid day
22 101 10/10/96 58 103 11/12/96
(sid) sname rating age (sid) bid day
22 dustin 7 45.0 22 101 10/10/9
22 dustin 7 45.0 58 103 11/12/9
31 lubber 8 55.5 22 101 10/10/9
31 lubber 8 55.5 58 103 11/12/9
58 rusty 10 35.0 22 101 10/10/9
58 rusty 10 35.0 58 103 11/12/9
FEMALE_EMP
SEX = ‘F’ (EMPLOYEE)
EMPNAMES
FNAME, LNAME, SSN (FEMALE_EMP)
EMP_DEPENDENTS
EMPNAMES DEPENDENT
ACTUAL_DEPENDENTS
SSN = ESSN (EMP_DEPENDENTS)
RESULT
FNAME, LNAME, DEPENDENT_NAME
(ACTUAL_DEPENDENTS )
30
join operator
• binaire operator– combineert gerelateerde tupels van 2 relaties
• = cartesisch product + selectie
• notatie
R F S
– met F een selectiecriterium
• voorbeeld– ACTUAL_DEPENDENTS EMPNAMES SSN=ESSN DEPENDENT
31
De join van R en S volgens criterium F is R F S = F ( R S )
join operator
– voorbeeld: combineer voor alle departementen informatie over het departement + de manager ervan:
DEPARTMENT MGRSSN = SSN EMPLOYEE
32
soorten joins
• Opdeling naargelang van de vorm van de join-voorwaarde F– F = C1 C2 … Cn
• theta-join: elke Ck is van de vorm Ai Bj met– { =, <, >, ≤, , ≠ }
– DOM (Ai) = DOM (Bj)
• equi-join: enkel “=“
• natuurlijke join – equi-join + weglaten van overtollige attributen
(d.w.z. per voorwaarde Ai = Bj enkel Ai of Bj behouden)
– notatie: R F S
33
vereenvoudigde notaties voor natuurlijke joins
• R X,Y S – met X en Y attribuutlijsten (van gelijke lengte)
– X1 = Y1 ... Xk = Yk
– alleen attributen in X blijven behouden na join
• R S – lijsten X en Y zijn impliciet: bevatten alle attributen
die dezelfde naam hebben in R en S
34
natural join voorbeeld
R1 S1
R1 * S1 =
sid sname rating age bid day22 dustin 7 45.0 101 10/10/9658 rusty 10 35.0 103 11/12/96
sid sname rating age
22 dustin 7 45.0
31 lubber 8 55.5 58 rusty 10 35.0
sid bid day
22 101 10/10/96 58 103 11/12/96
(a) PROJ_DEPT PROJECT DEPARTMENT
(b) DEPT_LOCS DEPARTMENT DEPT_LOCATIONS
Find names of sailors who have reserved boat #103
Reserves
Sailors
Boats
sid bid day
22 101 10/10/96 58 103 11/12/96
sid sname rating age
22 dustin 7 45.0
31 lubber 8 55.5 58 rusty 10 35.0
bid bname color 101 Interlake Blue 102 Interlake Red 103 Clipper Green 104 Marine Red
Syntax
selectie: <criterium>(R)projectie: <attributen>(R)join: R F S natural join: R*S
Find names of sailors who have reserved boat #103
• Oplossing 1:
• Oplossing 2:
103(( Reserves)*Sailors)sname bid
( (Reserves*Sailors))103sname bid
fundamentele operatoren
39
fundamentele operatoren
• de verzameling operatoren { , \, } is volledig:– andere operatoren kunnen op basis van deze gedefinieerd worden.
– vandaar de naam: fundamentele operatoren.
• niet-fundamentele operatoren: – join combinatie van – R S = R S \ ( R \ S ) \ ( S \ R )
– ...
– zijn niet strikt nodig
– wel gemakkelijk
• nog een niet-fundamentele operator: – de deling
40
deling
• Q = R S
– inverse van cartesisch product• Q is de maximale relatie waarvoor geldt dat Q S R
• Q bevat enkel de attributen van R die niet in S zitten
– voorbeeld: "geef alle werknemers die werken aan elk project waaraan John Smith werkt”
SMITH FNAME = ‘John’ AND LNAME = ‘Smith’ ( EMPLOYEE )
geeft EMPLOYEE-tupel(s) ‘John Smith’
SMITH_PNOS PNO ( WORKS_ON ESSN = SSN SMITH )
geeft alle projecten waaraan John Smith werkt
SSN_PNOS ESSN, PNO ( WORKS_ON )
geeft voor alle werknemers alle projecten waaraan ze werken
SSNS(SSN) SSN_PNOS SMITH_PNOS
deling geeft SSN's van gevraagde werknemers 41
SSNS(SSN) SSN_PNOS SMITH_PNOST R S
43
oefening: find the names of sailors who have reserved all boats
Reserves
Sailors
Boats
sid bid day
22 101 10/10/96 58 103 11/12/96
sid sname rating age
22 dustin 7 45.0
31 lubber 8 55.5 58 rusty 10 35.0
bid bname color 101 Interlake Blue 102 Interlake Red 103 Clipper Green 104 Marine Red
Syntax
selectie: <criterium>(R)projectie: <attributen>(R)join: R F S natural join: R*Sdeling=RS
Find the names of sailors who have reserved all boats
Tempsids (Reserves) (Boats),sid bid bid
(Tempsids*Sailors)sname
aggregaatfuncties
• functies die op verzamelingen waarden uitgevoerd worden– SUM, AVERAGE, MAX, MIN, COUNT
• notatie
groepering functies (R)
• groepering = verz. attributen op basis waarvan groepering gebeurt
• functies = lijst van koppels ( functie, attribuut )
• voorbeeld:
Dno AVERAGE Salary ( EMPLOYEE )
46
aggregaatfuncties
• resultaat: tabel met als attributen– attributen uit de groepering
– attributen met naam “Functie_attribuut” die het resultaat van de functie op dat attribuut geven
• voorbeeld:
– Dno COUNT Ssn, AVERAGE Salary ( EMPLOYEE )
– geeft tabel met attributen: Dno, Count_ssn, Average_salary
• groeperingsattributen kunnen weggelaten worden– aggregaatfunctie toegepast op de hele relatie
resultaat: 1 tupel
47
(a) R ( Dno, No_of_employees, Average_sal ) Dno COUNT Ssn, AVERAGE Salary (EMPLOYEE )
(b) Dno COUNT Ssn, AVERAGE Salary (EMPLOYEE )
(c) COUNT Ssn, AVERAGE Salary (EMPLOYEE )
recursieve sluiting
• vb. 1 – vind alle ondergeschikten van persoon Y
– = transitieve sluiting van “X heeft Y als chef”
• vb. 2 – in een stamboom-databank van honden:
– vind alle voorouders van “zwerver”
• niet algemeen uit te drukken in relationele algebra– wel voor bepaald aantal niveaus, bv. vind alle ouders, vind alle
grootouders, ...
– relationele uitdrukking groeit per niveau dat erbij komt
– onbeperkt aantal niveaus zou oneindige uitdrukking geven
49
50
uitwendige join
• gewone joins, bv. R * S, – leveren over de tupels die niet aan de join voorwaarde voldoen
geen enkele informatie op
– vb. • lijst van alle werknemers + als ze een departement leiden: naam van dat
departement
• join geeft enkel werknemers die effectief een departement leiden
• linkse uitwendige join– levert info over alle werknemers
– + info over het departement dat ze leiden, of nul als ze geen departement leiden
• analoog: – rechtse uitwendige join
– volledige uitwendige join51
TEMP ( EMPLOYEE Ssn = Mgr_ssn DEPARTMENT )
RESULT Fname, Minit, Lname, Dname ( TEMP )
52
+
-
varianten op unie
• Vereniging van tupels van niet vergelijkbare relaties
• Uitwendige unie: – Notatie : Q = R S
– Attr (Q) = Attr (R) Attr (S)
– nulwaarde voor attributen die niet van toepassing zijn
• Inwendige unie: – Notatie : Q = R S
– Attr(Q) = Attr(R) Attr(S)
+
+
-
-
+
-
53
voorbeelden van queries
– Q 1:• Retrieve the name and address of all employees who work for the
‘Research’ department
RESEARCH_DEPT DNAME = ‘Research’ ( DEPARTMENT )
RESEARCH_EMPS ( RESEARCH_DEPT Dnumber = Dno EMPLOYEE )
RESULT Fname, Lname, Address ( RESEARCH_EMPS )
54
voorbeelden van queries
– Q 3:• Find the names of employees who work on all the projects controlled by
department number 5
DEPT5_PROJS ( Pno ) Pnumber ( Dnum = 5 ( PROJECT ) )
EMP_PROJ ( Ssn, Pno ) Essn, Pno ( WORKS_ON )
RESULT_EMP_SSNS EMP_PROJ DEPT5_PROJS
RESULT Lname, Fname ( RESULT_EMP_SSNS EMPLOYEE )
55
voorbeelden van queries
– Q 4:• Make a list of projects that involve an employee whose last name is ‘Smith’,
either as a worker or as a manager of the department that controls the project
SMITHS (Essn) SSN ( Lname = ‘Smith’ ( EMPLOYEE ) )
SMITH_WORKER_PROJ Pno ( WORKS_ON SMITHS )
MGRS Lname, Dnumber (EMPLOYEE Ssn = Mgr_ssn DEPARTMENT)
SMITH_MANAGED_DEPTS (Dnum) Dnumber ( Lname = ‘Smith’ (MGRS) )
SMITH_MGR_PROJS (Pno) Pnumber ( SMITH_MANAGED_DEPTS PROJECT )
RESULT (SMITH_WORKER_PROJ SMITH_MGR_PROJS )
56
voorbeelden van queries
• Q 5:– List the names of all employees with two or more dependents
T1 (Ssn, No_of_dependents) EssnFCOUNT Dependent_name (DEPENDENT)
T2 No_of_dependents 2 ( T1 )
RESULT Lname, Fname ( T2 EMPLOYEE )
57
voorbeelden van queries
• Q 6:– Retrieve the names of employees who have no dependents
ALL_EMPS Ssn ( EMPLOYEE )
EMPS_WITH_DEPS ( Ssn ) Essn ( DEPENDENT )
EMPS_WITHOUT_DEPS ALL_EMPS \ EMPS_WITH_DEPS
RESULT Lname, Fname ( EMPS_WITHOUT_DEPS EMPLOYEE )
58
voorbeelden van queries
– Q 7:
• List the names of managers who have at least one dependent
MGS ( Ssn ) Mgr_ssn ( DEPARTMENT )
EMPS_WITH_DEPS ( Ssn ) Essn ( DEPENDENT )
MGRS_WITH_DEPS MGRS EMPS_WITH_DEPS
RESULT Lname, Fname ( MGRS_WITH_DEPS EMPLOYEE )
59
VRAGEN?
60
relationele calculus
61
relationele calculus
• vragen stellen d.m.v. omschrijving van de resultaatverzameling– relationele algebra beschrijft operaties om tot het resultaat te
komen ( b.v. projecteer, ...) proceduraal
– relationele calculus beschrijft condities waaraan het resultaat moet voldoen declaratief
• omschrijving wordt gegeven in predikatenlogica
• relationele calculus omvat– tupelcalculus: maakt gebruik van tupelvariabelen
– domeincalculus: domeinvariabelen stellen een attribuutwaarde voor
62
ter herinnering: propositielogica
• propositie– bewering die waar of onwaar is
– aangegeven door middel van 1 symbool: p, q, ...
• operatoren– ontkenning – conjunctie – disjunctie – implicatie – equivalentie ↔
• samengestelde beweringen– een of meer symbolen
– operatoren
63
predikatenlogica
• (eerste orde) predikatenlogica– maakt gebruik van variabelen
– predikaat = bewering over objecten
– formules verwijzen expliciet naar die objecten (d.m.v. variabelen, constanten, functies)
– quantificatie van variabelen: , – predikatenlogica van de eerste orde:
• achter en staan alleen variabelen, geen complete verzamelingen
• relationele calculus gebruikt eerste orde predikatenlogica
64
tupel relationele calculus
• Basisvormen van query:
{ t | formule(t) }
{ t.A1, t.A2, ..., t.An | formule(t) }
– t : tupel variabele
– formule : voorwaarde (of predikaat)beschrijft de condities waaraan t moet voldoen om in het resultaat voor te komen
– attribuut van tupelvariabele selecteren: t.ATTR
• voorbeelden: – { t | EMPLOYEE(t) and t.SALARY > 50000 }
– { t.FNAME, t.LNAME | EMPLOYEE(t) and t.SALARY > 50000 }
65
algemene uitdrukking in tupelcalculus
{ t1.A1, t2.A2, ..., tn.An | COND(t1, t2,... tn, tn+1,..., tn+m) }
– ti : tupelvariabele (niet noodzakelijk verschillend)
– Ai: attribuutnaam, horende bij de relatie ti– COND: een voorwaarde (of “well formed formula” - WFF)
– ti links van "|" = alle variabelen die vrij voorkomen (niet gebonden door of ) in de COND
66
conditie
• COND bestaat uit – atomen + logische connectoren + quantificatoren
• een atoom is van de vorm:– R(ti) R: relatienaam, ti: tupelvariable
– ti.A tj.B { <,>,=, , , }
en A attribuut van ti, B attribuut van tj– ti.A c of c tj.B { <,>,=, , , } en c een constante
• waarde van een atoom: true of false
67
voorbeeld
• { t | EMPLOYEE(t) and t.SALARY > 50000 }
68
connector
vergelijkingsoperator
constante
variabele
voorbeeld
• Q_0– Geef de geboortedatum en het adres van de werknemer (of de
werknemers) met naam ‘John Smith’
69
{ t.Bdate, t.Address | EMPLOYEE(t) and t.Fname = ‘John’ and t.Lname = ‘Smith’ }
oefening: geef alle rode of groene boten
Reserves
Sailors
Boats
sid bid day
22 101 10/10/96 58 103 11/12/96
sid sname rating age
22 dustin 7 45.0
31 lubber 8 55.5 58 rusty 10 35.0
bid bname color 101 Interlake Blue 102 Interlake Red 103 Clipper Green 104 Marine Red
Syntax
{ t1.A1, …,tn.An | COND(t1, t2,... tn) }
•ti : tupelvariabele•Ai: attribuutnaam,•COND: een voorwaarde
oefening: geef alle rode of groene boten
{t | Boats(t) and (t.color=‘red’ or t.color=‘green’)}
71
gebonden en vrije variabelen
• een tupelvariabele t is gebonden als ze gequantificeerd is (met een quantor of voorkomt)
• voorbeelden:F1: d.DNAME = ‘Research’
F2: ( t ) ( d.DNUMBER = t.DNO )
F3: ( d ) ( d.MGSSN = ‘333445555’ )
d is vrij in F1 en in F2
d is gebonden met in F3
t is gebonden met in F2
72
{ t.Fname, t.Lname, t.Address | EMPLOYEE(t) AND (d) (DEPARTMENT(d)
AND d.Dname = 'Research’AND d.Number = t.Dno) }
• Q_1 – Geef naam en adres van alle werknemers die voor het
'Research' departement werken
vrije tupelvariabelen alleen links van | EMPLOYEE(t) en DEPARTEMENT(d) specificeren het bereik van t en dd.Dname = 'Research’ selectievoorwaarded.Number = t.Dno joinvoorwaarde
73
quantoren
• Existentiële quantor: (er bestaat)
• Universele quantor: (voor alle)
• (t)(formule(t)) – er bestaat een tupel t die aan de conditie voldoet
– bv. (t)(EMPLOYEE(t) and t.fname=‘John’)
• (t)(formule(t)) – alle tuples in het universum voldoen aan de conditie
74
{ t.Fname, t.Lname, t.Address | EMPLOYEE(t) AND (d) (DEPARTMENT(d)
AND d.Dname = 'Research’AND d.Number = t.Dno) }
• Q_1 – Geef naam en adres van alle werknemers die voor het
'Research' departement werken
existentiële quantor: moet waar zijn voor tenminste één tuple
we vragen werknemers op waarvoor er een gerelateerd tupel in de departement tabel bestaat met als naam ‘Research’
oefening: Find sailors who have reserved boat #103
Reserves
Sailors
Boats
sid bid day
22 101 10/10/96 58 103 11/12/96
sid sname rating age
22 dustin 7 45.0
31 lubber 8 55.5 58 rusty 10 35.0
bid bname color 101 Interlake Blue 102 Interlake Red 103 Clipper Green 104 Marine Red
Syntax
{ t1.A1, …,tn.An | COND(t1, t2,... tn) }
•ti : tupelvariabele•Ai: attribuutnaam,•COND: een voorwaarde
• ti links van "|" = allevariabelen die vrijvoorkomen (nietgebonden door of ) in de COND
oefening: Find sailors who have reserved boat #103
{s | Sailors(s) and
( r)(Reserves(r) and r.sid = s.sid
and r.bid = 103)}
77
gebruik van universele quantoren
• (x) (P(x))– waar als P(x) waar is voor elke x van het universum
– bv. (x) (x.color = “Rood”)
– betekent dat alles wat bestaat rood is
• logische implicatie– (x) (Boot(x) (x.color = “Rood”))
– (x) IF Boot(x) THEN (x.color = “Rood”)
– Als x een boot is, dan moet de kleur rood zijn
78
gebruik van universele quantoren
• is een logische implicatie– a b betekent dat als a waar is, ook b waar moet zijn
– a b is hetzelfde als a b
• (x) (x.dnum=5 F2)
• (x) IF x.dnum=5 THEN F2
• (x) (not (x.dnum=5) or F2)– x.dnum=5: F2 moet waar zijn
79
gebruik van universele quantoren
• (x) (Boot(x) (x.color = ‘Rood’))
• is een logische implicatie– als x een boot is, dan moet de kleur rood zijn
• (x) (Boot(x) x.color = ‘Rood’)– X is geen boot: conditie is waar
– X is een boot: x.color=‘Rood’ moet waar zijn
80
{ e.Lname, e.Fname | EMPLOYEE(e) AND ( (x) ( NOT (PROJECT(x))
OR ( (w) ( WORKS_ON(w)
AND w.Essn = e.SsnAND x.Pnumber = w.Pno ) ) ) ) }
In woorden: als x een project is, dan moet er een overeenkomstig tupel in de works_on tabel bestaan.
– Q_3: Geef de namen van de werknemers die aan alle projecten werken
81
– ( x ) ( F ) :• moet voldaan zijn voor alle tuples in het universum die aan x kunnen
worden toegekend
– daarom:• ( x ) ( not PROJECT ( x ) )
• alle tupels die niet tot PROJECT behoren uitsluiten van verdere selectievoorwaarde
– verder moet dus gelden voor een employee e dat hij werkt op elk project dat niet uitgesloten werd
{ e.Lname, e.Fname | EMPLOYEE(e) AND ( (x) ( NOT (PROJECT(x))
OR ( (w) ( WORKS_ON(w)
AND w.Essn = e.SsnAND x.Pnumber = w.Pno ) ) ) ) }
82
{e.Fname, e.Lname | EMPLOYEE(e) AND( ( d) ( NOT (DEPENDENT(d)) OR NOT (e.Ssn = d.Essn) ) ) }
• Q_6– Geef de namen van alle werknemers zonder personen ten
laste:
83
oefening: find sailors who reserved all boats
Reserves
Sailors
Boats
sid bid day
22 101 10/10/96 58 103 11/12/96
sid sname rating age
22 dustin 7 45.0
31 lubber 8 55.5 58 rusty 10 35.0
bid bname color 101 Interlake Blue 102 Interlake Red 103 Clipper Green 104 Marine Red
Syntax
{ t1.A1, …,tn.An | COND(t1, t2,... tn) }
•ti : tupelvariabele•Ai: attribuutnaam,•COND: een voorwaarde
oefening: find sailors who reserved all boats
{s | Sailors(s) and
( b)(not Boats(b) or ( r)(Reserves(r) and r.sid=s.sid
and r.bid=b.bid))}
Quantoren in SQL
• EXISTS
• – bestaat niet:
– gebruik not ( x ): NOT EXISTS
86
domein relationele calculus
– Analoog aan tupelcalculus, maar variabelen verwijzen naar een attribuutwaarde i.p.v. een heel tupel
– Vorm van query:
{ x1, ..., xn | COND (x1, x2, ..., xn+m ) }
– Voorbeeld:• { v f | EMPLOYEE ( v, m, f, s, b, a, g, w, c, d ) }
– COND = atomen + connectoren + quantoren • is een WWF (well formed formule)
• net als bij tupelcalculus
• atoom = R(x1,...,xn) of "xi xj" of "xi c"} met R een relatienaam,
{ <, >, =, } en c een constante
87
{ u v | ( q) ( r) ( s) ( t) ( w) ( x) ( y) ( z) ( EMPLOYEE ( qrstuvwxyz ) AND q = 'John' AND r = 'B' AND s = 'Smith’ ) }
{ u v | (EMPLOYEE('John', 'B', 'Smith', t, u, v, w, x, y, z ) }
• Q_0– Geef geboortedatum en adres van werknemer John B. Smith
– praktisch worden alleen de variabelen gequantificeerd die in een voorwaarde voorkomen:
– Andere vorm (constanten direct ingevuld) :
{ u v | ( q) ( r) ( s) ( EMPLOYEE ( qrstuvwxyz ) AND q = 'John' AND r = 'B' AND s = 'Smith’ ) }
88
{q s v | ( z) ( l) (m) ( EMPLOYEE( qrstuvwxyz ) AND ( DEPARTMENT( lmno ) AND l = 'Research' AND m = z) ) }
• Q_1– Geef naam en adres van alle werknemers die voor
departement 'Research' werken:
89
{i k s u v | ( j) (m) ( n) ( t)( PROJECT ( h i j k ) AND EMPLOYEE ( q r s t u v w x y z )
AND DEPARTMENT ( l m n o ) AND k = m AND n = t AND j = 'Stafford' ) }
– Q_2
• Geef voor elk project in Stafford nummer, nummer van controlerend dept. en de managers familienaam, geboortedatum en adres:
90
{q s | ( t ) (EMPLOYEE ( q r s t u v w x y z ) AND ( NOT ( l ) (DEPENDENT ( l m n o p )
AND t = l ) ) ) }
{q s | ( t ) ( EMPLOYEE ( q r s t u v w x y z ) AND ( ( l ) ( NOT ( DEPENDENT ( l m n o p ) )
OR NOT t = l ) ) ) ) }
• Q_6• Geef de namen van alle werknemers zonder personen ten laste:
91
VRAGEN?
92
Surf naar je KU Loket en laat je stem horen in de online bevraging over het onderwijs!
De evaluatieperiode loopt tot en met woensdag 13 maart 2013.
Surf naar je KU Loket en laat je stem horen in de online bevraging over het onderwijs!
De evaluatieperiode loopt tot en met woensdag 13 maart 2013.