20130221 GB les 3

Post on 20-Jun-2015

4.340 views 1 download

Transcript of 20130221 GB les 3

relationele algebrarelationele calculus

Matthijs van Leeuwenmatthijs.vanleeuwen@cs.kuleuven.be

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.