4. 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
11. 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}
11
17. projectie
<attributenlijst>(R)
– 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 is
X(r) = { t | tupelschema van t is X en t’ r : t t’ }
17
18. 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
19. 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
21. Find names of sailors who are younger
than 50
sid bid day
Reserves 22 101 10/10/96 Syntax
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
22. Find names of sailors who are younger
than 50
sid bid day
Reserves 22 101 10/10/96 Oplossing
58 103 11/12/96
sname(age<50(Sailors))
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
23. 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
23
24. (a) FNAME, LNAME, SALARY ( DNO = 5 (EMPLOYEE ) )
(b) zelfde met tussenresultaat en hernoeming van attributen
25. 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
n=m (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
25
28. 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
28
31. 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
32. 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 )
32
33. 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
34. 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
• RS
– lijsten X en Y zijn impliciet: bevatten alle attributen
die dezelfde naam hebben in R en S
34
40. 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
40
41. 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(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
41
deling geeft SSN's van gevraagde werknemers
44. oefening: find the names of sailors who
have reserved all boats
sid bid day
Reserves 22 101 10/10/96 Syntax
58 103 11/12/96 selectie: <criterium>(R)
sid sname rating age projectie: <attributen>(R)
join: R F S
Sailors 22 dustin 7 45.0 natural join: R*S
deling=RS
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
45. Find the names of sailors who have
reserved all boats
Tempsids (Reserves) (Boats)
sid,bid bid
sname (Tempsids*Sailors)
46. 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
47. 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
48. (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 )
49. 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
51. 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
51
53. 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
54. 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
55. 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
56. 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
57. 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
58. 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
59. 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
62. 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
63. 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
64. 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
65. 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
66. 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
67. 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
68. voorbeeld connector constante
• { t | EMPLOYEE(t) and t.SALARY > 50000 }
vergelijkingsoperator
variabele
68
69. 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’ }
69
70. oefening: geef alle rode of groene boten
sid bid day
Reserves 22 101 10/10/96 Syntax
58 103 11/12/96
{ t1.A1, …,tn.An |
sid sname rating age COND(t1, t2,... tn) }
Sailors 22 dustin 7 45.0 •ti : tupelvariabele
31 lubber 8 55.5 •Ai: attribuutnaam,
•COND: een voorwaarde
58 rusty 10 35.0
Boats bid bname color
101 Interlake Blue
102 Interlake Red
103 Clipper Green
104 Marine Red
71. oefening: geef alle rode of groene
boten
{t | Boats(t) and
(t.color=‘red’ or t.color=‘green’)}
71
72. 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
73. • 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
73
74. 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
75. • 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) }
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’
76. oefening: Find sailors who have reserved
boat #103
sid bid day
Reserves 22 101 10/10/96 Syntax
58 103 11/12/96
{ t1.A1, …,tn.An |
sid sname rating age COND(t1, t2,... tn) }
Sailors 22 dustin 7 45.0 •ti : tupelvariabele
31 lubber 8 55.5 •Ai: attribuutnaam,
•COND: een voorwaarde
58 rusty 10 35.0 • ti links van "|" = alle
variabelen die vrij
Boats bid bname color voorkomen (niet
101 Interlake Blue gebonden door of
) in de COND
102 Interlake Red
103 Clipper Green
104 Marine Red
77. 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
78. 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
79. 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
80. 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
81. – 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.
81
82. { 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
82
83. • 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) ) ) }
83
84. oefening: find sailors who reserved all
boats
sid bid day
Reserves 22 101 10/10/96 Syntax
58 103 11/12/96
{ t1.A1, …,tn.An |
sid sname rating age COND(t1, t2,... tn) }
Sailors 22 dustin 7 45.0 •ti : tupelvariabele
31 lubber 8 55.5 •Ai: attribuutnaam,
•COND: een voorwaarde
58 rusty 10 35.0
Boats bid bname color
101 Interlake Blue
102 Interlake Red
103 Clipper Green
104 Marine Red
85. 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))}
86. Quantoren in SQL
• EXISTS
•
– bestaat niet:
– gebruik not ( x ): NOT EXISTS
86
87. 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
88. • 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 ) }
88
89. • 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) ) }
89
90. – 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' ) }
90
91. • 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 ) ) ) ) }
91
93. Surf naar je KU
Surf naar je KU Loket
Loket en laat je
en laat je stem horen
stem horen in de
in de online
online bevraging
bevraging over het
over het onderwijs!
onderwijs!
De
De evaluatieperiode
evaluatieperiode
loopt tot en met
loopt tot en met
woensdag 13 maart
woensdag 13
2013.
maart 2013.