2. inhoud deze les
• Relationele algebra
• Relationele calculus
– Tupel relationele calculus
– Domein relationele calculus
• Query By Example (QBE)
2
3. 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
9. 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 , ,
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}
9
15. projectie
<attributenlijst>(R)
– 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’ }
15
16. 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
17. 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
19. Find names of sailors who are younger
than 50
sid bid day Syntax
Reserves
22 101 10/10/96
58 103 11/12/96 selectie: <criterium>(R)
sid sname rating age projectie: <attributen>(R)
Sailors 22 dustin 7 45.0
31 lubber 8 55.5
58 rusty 10 35.0
Boats bid bname color
101 Interlake Blue
102 Interlake Red
103 Clipper Green
104 Marine Red
20. Find names of sailors who are younger
than 50
sid bid day Oplossing:
Reserves sname (age<50(Sailors))
22 101 10/10/96
58 103 11/12/96
sid sname rating age
Sailors 22 dustin 7 45.0
31 lubber 8 55.5
58 rusty 10 35.0
Boats bid bname color
101 Interlake Blue
102 Interlake Red
103 Clipper Green
104 Marine Red
21. hernoeming
– doel: wijziging van attribuutnamen
– notatie: nieuwe namen tussen haakjes vermeld
– voorbeeld:
RESULT(Firstname, Lastname, Salary)
FNAME, LNAME, SALARY (DEP5_EMPS)
– hernoeming kan ook met een (unaire) operator voorgesteld worden
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
22. (a) FNAME, LNAME, SALARY ( DNO = 5 (EMPLOYEE ) )
(b) zelfde met tussenresultaat en hernoeming van attributen
23. Unie , doorsnede , verschil
– enkel toegelaten op vergelijkbare ("union compatible") relaties
– definitie
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
– schema-behoudend, op attribuutnamen na
• afspraak: behoud attribuutnamen van 1-ste relatie
23
26. Cartesisch product
• Zij gegeven de relaties
– R ( A1,...,An )
– S ( B1,...,Bm )
– die niet noodzakelijk vergelijkbaar zijn
• Q=RS
– heeft schema Q(A1,...,An,B1,...,Bm)
– en bevat elke combinatie van tupels uit R en S
26
29. 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
30. join operator
– voorbeeld: combineer voor alle departementen informatie over
het departement + de manager ervan:
DEPARTMENT MGRSSN = SSN EMPLOYEE
De join van R en S volgens criterium F is
R F S = F ( R S )
30
31. 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
32. vereenvoudigde notaties voor natuurlijke joins
• R X,Y S
– met X en Y lijsten van attributen
– alle attribuutwaarden moeten aan elkaar gelijk zijn
• RS
– lijsten X en Y zijn impliciet: bevatten alle attributen
die dezelfde naam hebben in R en S
32
34. (a) PROJ_DEPT PROJECT DEPARTMENT
(b) DEPT_LOCS DEPARTMENT DEPT_LOCATIONS
35. Find names of sailors who have reserved
boat #103
sid bid day Syntax
Reserves
22 101 10/10/96
58 103 11/12/96 selectie: <criterium>(R)
sid sname rating age projectie: <attributen>(R)
Sailors join: R F S
22 dustin 7 45.0
natural join: R * S
31 lubber 8 55.5
58 rusty 10 35.0
Boats bid bname color
101 Interlake Blue
102 Interlake Red
103 Clipper Green
104 Marine Red
36. Find names of sailors who have
reserved boat #103
• Oplossing 1:
sname(( bid 103 Reserves)*Sailors)
• Oplossing 2:
sname( (Reserves*Sailors))
bid103
38. 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
– RS=RS(RS)(SR)
– ...
– zijn niet strikt nodig
– wel gemakkelijk
• nog een niet-fundamentele operator:
– de deling
38
39. deling
• Q=RS
– 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
39
deling geeft SSN's van gevraagde werknemers
42. oefening: find the names of sailors who
have reserved all boats
sid bid day Syntax
Reserves 22 101 10/10/96
58 103 11/12/96 selectie: <criterium>(R)
sid sname rating age projectie: <attributen>(R)
Sailors join: R F S
22 dustin 7 45.0
natural join: R * S
31 lubber 8 55.5 deling: R S
58 rusty 10 35.0
Boats
bid bname color
101 Interlake Blue
102 Interlake Red
103 Clipper Green
104 Marine Red
43. Find the names of sailors who have
reserved all boats
Tempsid
(Reserves)/ (Boats)
sid ,bid bid
sname(Tempsid *Sailors)
44. 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
45. 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
46. (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 )
47. 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
49. 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
51. 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
52. 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
53. 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
54. 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
55. 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
56. 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
57. 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
58. 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
59. 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
60. 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
61. 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
62. 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
63. 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
64. voorbeeld connector constante
• { t | EMPLOYEE(t) and t.SALARY > 50000 }
vergelijkingsoperator
variabele
64
65. voorbeeld
• Q_0
– Geef de geboortedatum en het adres van de werknemer (of de
werknemers) met naam „John Smith‟
{ t.Bdate, t.Address | EMPLOYEE(t) and
t.Fname = ‘John’ and t.Lname = ‘Smith’ }
65
66. oefening: geef alle rode of groene boten
sid bid day Syntax
Reserves
22 101 10/10/96
58 103 11/12/96 { t1.A1, ..., tn.An |
COND(t1, t2,..., tn) }
sid sname rating age
Sailors
22 dustin 7 45.0 •ti : tupelvariabele
31 lubber 8 55.5 •Ai: attribuutnaam,
horende bij de relatie ti
58 rusty 10 35.0 •COND: een voorwaarde
Boats bid bname color
101 Interlake Blue
102 Interlake Red
103 Clipper Green
104 Marine Red
67. oefening: geef alle rode of groene
boten
{t|Boats(t) and (t.color=‘red’ or t.color=‘green’)}
67
68. 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
69. • Q_1
– Geef naam en adres van alle werknemers die voor het
'Research' departement werken
{ t.Fname, t.Lname, t.Address | EMPLOYEE(t)
AND (d) (DEPARTMENT(d)
AND d.Dname = 'Research’
AND d.Number = t.Dno) }
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
70. 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
71. oefening: find sailors who have reserved
boat #103
sid bid day Syntax
Reserves
22 101 10/10/96
58 103 11/12/96 { t1.A1, ..., tn.An |
COND(t1, t2,..., tn) }
sid sname rating age
Sailors 22 dustin 7 45.0 •ti : tupelvariabele
31 lubber 8 55.5 •Ai: attribuutnaam, horende
bij de relatie ti
58 rusty 10 35.0 •COND: een voorwaarde
bid bname color •ti links van "|" = alle
Boats
101 Interlake Blue variabelen die vrij
voorkomen (niet gebonden
102 Interlake Red door of ) in de COND
103 Clipper Green
104 Marine Red
72. 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
73. 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
74. 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
75. 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
76. – Q_3: Geef de namen van de werknemers die aan alle projecten
werken
{ 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.
76
77. { 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 ) ) ) ) }
– (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
77
78. • Q_6
– Geef de namen van alle werknemers zonder personen ten
laste:
{e.Fname, e.Lname |
EMPLOYEE(e) AND
( ( d) ( NOT (DEPENDENT(d)) OR NOT (e.Ssn = d.Essn) ) ) }
78
79. oefening: find sailors who reserved all boats
sid bid day Syntax
Reserves
22 101 10/10/96
58 103 11/12/96 { t1.A1, ..., tn.An |
COND(t1, t2,..., tn) }
sid sname rating age
Sailors
22 dustin 7 45.0 •ti : tupelvariabele
31 lubber 8 55.5 •Ai: attribuutnaam,
horende bij de relatie ti
58 rusty 10 35.0 •COND: een voorwaarde
Boats bid bname color
101 Interlake Blue
102 Interlake Red
103 Clipper Green
104 Marine Red
80. 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
81. Quantoren in SQL
• EXISTS
•
– bestaat niet:
– gebruik not ( x ): NOT EXISTS
81
82. 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
83. • Q_0
– Geef geboortedatum en adres van werknemer John B. Smith
{ u v | ( q) ( r) ( s) ( t) ( w) ( x) ( y) ( z)
( EMPLOYEE ( qrstuvwxyz )
AND q = 'John' AND r = 'B' AND s = 'Smith’ ) }
– praktisch worden alleen de variabelen gequantificeerd die
in een voorwaarde voorkomen:
{ u v | ( q) ( r) ( s)
( EMPLOYEE ( qrstuvwxyz )
AND q = 'John' AND r = 'B' AND s = 'Smith’ ) }
– Andere vorm (constanten direct ingevuld) :
{ u v | (EMPLOYEE('John', 'B', 'Smith', t, u, v, w, x, y, z ) }
83
84. • Q_1
– Geef naam en adres van alle werknemers die voor
departement 'Research' werken:
{q s v | ( z) ( l) ( m) ( EMPLOYEE( qrstuvwxyz ) AND
( DEPARTMENT( lmno )
AND l = 'Research' AND m = z) ) }
84
85. – Q_2
• Geef voor elk project in Stafford nummer, nummer van
controlerend dept. en de managers familienaam,
geboortedatum en adres:
{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' ) }
85
86. • Q_6
• Geef de namen van alle werknemers zonder personen ten laste:
{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 ) ) ) ) }
86
87. 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
89. – Q_0
• retrieve the birthdate and address of the employee whose name is „John B. Smith‟
90. 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
1 Q_0A
Q_0B met condition box
Q_0B zonder condition box
1
P. 2 > 20
90
91. 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
93. orde van resultaat
• P. AO(m).
– print in ascending order (m = prioriteit)
• P. DO(n).
– print in descending order (n = prioriteit)
93
94. 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
95.
96. 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
97. • Q_6 List the names of all employees who have no
dependents
97
98. 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
99. • (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