relationele algebra en relationele calculus
-
Upload
katrien-verbert -
Category
Education
-
view
2.508 -
download
2
description
Transcript of relationele algebra en relationele calculus
inhoud deze les
• Relationele algebra
• Relationele calculus
– Tupel relationele calculus
– Domein relationele calculus
• Query By Example (QBE)
2
relationele model: herhaling terminologie
• 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”, …
3
4
relationele vraagtalen
• vraagtaal (query language) = gegevensmanipulatietaal
• biedt functionaliteit voor
– opvragen
– toevoegen
– verwijderen
– wijzigen van gegevens
5
indeling van relationele vraagtalen
• Algebraïsche talen
– steunen op relationele algebra
– gebruiken operatoren
– proceduraal
• Calculustalen
– steunen op relationele calculus
– gebruiken formele beschrijving
van gewenste info
• predikatenlogica
– niet-proceduraal
– 2 soorten:
• tupel-calculus,
• domein-calculus
6
relationele algebra
• verzamelingsoperatoren
– unie, doorsnede, verschil, cartesisch product
• relationele operatoren
– selectie, projectie, join, deling, hernoeming
• unaire of binaire operatoren
7
selectie
8
De selectie van tupels uit extensie r van relatie R onder formule F is 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 , ,
9
voorbeelden
• DNO=4 (EMPLOYEE)
• SALARY > 30000 (EMPLOYEE)
• (DNO = 4 SALARY > 25000) v (DNO = 5 SALARY > 30000)(EMPLOYEE)
10
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
color'red'color'green'
(Boats)
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 )
13
projectie
14
projectie
– doel: een aantal kolommen uit een tabel halen
– resultaat:
• verzameling tuples
• 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 is X(r) = { t | tupelschema van t is X en t’ r : t t’ }
<attributenlijst>(R)
15
eigenschappen van projectie
• # X ( r ) ≤ # r
– reden: dubbels 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 )
16
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
18
Find names of sailors who are younger
than 50
Syntax
selectie: <criterium>(R)
projectie: <attributen>(R)
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
Find names of sailors who are younger
than 50
Oplossing:
sname (age<50(Sailors))
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
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 hernoemd 2. S (R) alleen relatie wordt hernoemd 3. (B1, B2,…, Bn) (R) alleen attributen worden hernoemd
21
– 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
m = n (d.w.z. R en S hebben dezelfde graad)
DOM (Ai) = DOM (Bi) voor 1 ≤ i ≤ n
23
RESULT ← RESULT1 U RESULT2
24
25
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
26
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/96
22 dustin 7 45.0 58 103 11/12/96
31 lubber 8 55.5 22 101 10/10/96
31 lubber 8 55.5 58 103 11/12/96
58 rusty 10 35.0 22 101 10/10/96
58 rusty 10 35.0 58 103 11/12/96
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 )
28
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
29
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
30
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)
• speciale gevallen
– 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
31
vereenvoudigde notaties voor natuurlijke joins
• R X,Y S
– met X en Y lijsten van attributen
– alle attribuutwaarden moeten aan elkaar gelijk zijn
• R S
– lijsten X en Y zijn impliciet: bevatten alle attributen
die dezelfde naam hebben in R en S
32
natural join voorbeeld
R1
S1
R1 * S1 =
sid sname rating age bid day
22 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
Syntax
selectie: <criterium>(R)
projectie: <attributen>(R)
join: R F S
natural join: R * S
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
Find names of sailors who have
reserved boat #103
• Oplossing 1:
• Oplossing 2:
sname(( bid103Reserves)*Sailors)
sname(bid103(Reserves*Sailors))
fundamentele operatoren
37
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 38
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 „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 39
41
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 * S
deling: R S
Find the names of sailors who have
reserved all boats
)(/)(Re,
Boatsbid
servesbidsid
Tempsid
)*( SailorsTempsidsname
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 )
44
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
45
(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
47
48
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 join
49
TEMP ( EMPLOYEE Ssn = Mgr_ssn DEPARTMENT ) RESULT Fname, Minit, Lname, Dname ( TEMP )
50
+
-
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)
• ( alleen gemeenschappelijke attributen blijven behouden )
+
+
-
-
+
-
51
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 )
52
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 )
53
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 )
54
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 )
55
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 )
56
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 )
57
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
58
ter herinnering: propositielogica
• propositie
– bewering die waar of onwaar zijn
– aangegeven door middel van 1 symbool: p, q, ...
• operatoren
– ontkenning
– conjunctie
– disjunctie
– implicatie
– equivalentie ↔
• samengestelde beweringen
– een of meer symbolen
– operatoren
59
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
60
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 }
61
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
62
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
63
voorbeeld
• { t | EMPLOYEE(t) and t.SALARY > 50000 }
64
connector
vergelijkingsoperator
constante
variabele
voorbeeld
• Q_0
– Geef de geboortedatum en het adres van de werknemer (of de
werknemers) met naam „John Smith‟
65
{ 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,
horende bij de relatie ti
•COND: een voorwaarde
oefening: geef alle rode of groene
boten
{t|Boats(t) and (t.color=‘red’ or t.color=‘green’)}
67
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
68
{ 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 d d.Dname = 'Research’ selectievoorwaarde d.Number = t.Dno joinvoorwaarde
69
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
70
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, horende
bij de relatie ti
•COND: een voorwaarde
•ti links van "|" = alle
variabelen die vrij
voorkomen (niet gebonden
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)}
72
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
73
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
74
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
75
{ e.Lname, e.Fname | EMPLOYEE(e) AND ( (x) ( NOT (PROJECT(x)) OR ( (w) ( WORKS_ON(w) AND w.Essn = e.Ssn AND 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
76
– ( 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.Ssn AND x.Pnumber = w.Pno ) ) ) ) }
77
{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:
78
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,
horende bij de relatie ti
•COND: een voorwaarde
oefening: find sailors who reserved all
boats
{s | Sailors(s) and
( x)(not Boats(x) or ( r) (Reserves(r)
and r.sid = s.sid
and x.bid = r.bid))}
80
Quantoren in SQL
• EXISTS
•
– bestaat niet:
– gebruik not ( x ): NOT EXISTS
81
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
82
{ 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’ ) }
83
{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:
84
{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:
85
{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:
86
QBE = Query By Example
• was een der eerste grafische query talen
• geïllustreerd a.h.v. QMF-implementatie (DB2, ...)
• queries worden uitgedrukt d.m.v. een voorbeeld
– maakt gebruik van skelet-tabellen of sjablonen
– gebruiker vult die in naargelang het gewenste soort resultaat
– voorbeelden (= variabelen) beginnen met _
– constanten worden letterlijk ingegeven
• evt. met operator, bv. >20
• 20 is equivalent met =20
– P. : print: dit moet in het resultaat zichtbaar zijn
87
88
– Q_0
• retrieve the birthdate and address of the employee whose name is „John B. Smith‟
Q_0A
List the social security numbers of employees who work more than
20 hours per week on project number 1
Q_0B
List the social security numbers of employees who work more than
20 hours per week on either project 1 or project 2
Q_0A
Q_0B met condition box
Q_0B zonder condition box 1
2 P. > 20
1
90
algemene regels
• condities op 1 rij staan in AND-verband
• condities op verschillende rijen staan in OR-verband
• aparte "condition box" voor complexere voorwaarden
• "Result" tabel kan expliciet vermeld worden
– P. onder naam van tabel i.p.v. bij attributen
91
join
dezelfde variabele in verschillende kolommen zetten
92
orde van resultaat
• P. AO(m).
– print in ascending order (m = prioriteit)
• P. DO(n).
– print in descending order (n = prioriteit)
93
queries met aggregaatfuncties en groepering
• groeperingsoperator:
– G.
• Aggregaatfuncties:
– AVG., SUM., CNT., MAX., MIN.
– bij default toegepast op verschillende waarden
– indien toe te passen op alle waarden: pefix ALL
94
negatie
• gebruik gelijkaardig met NOT EXISTS in SQL
– onder tabelnaam: "dit tupel komt niet voor”
– niet toegelaten in conditiebox
• niet volledig equivalent ( niet relationeel volledig)
– althans QMF-implementatie niet
• voorbeeld
– vind alle employees die aan alle projecten van departement nr.
5 werken
– kan niet uitgedrukt worden in de versie van QBE zoals hier
besproken
96
• Q_6 List the names of all employees who have no
dependents
97
wijzigingen in de gegevensbank
• I. insert aangegeven bij toe voegen tupel
• D. delete aangegeven bij de weg te laten tupel
• U. Update aangegeven in de te wijzigen kolom
• ook weglaten van meerdere tupels tegelijk is mogelijk
98
• (a) insert a new EMPLOYEE tuple
• (b) delete the tuple with given SSN from EMPLOYEE
• (c) increase the salary of „John Smith‟ by 10 % and reassign him to
department number 4
VRAGEN?
100