20130221 GB les 3

93
relationele algebra relationele calculus Matthijs van Leeuwen [email protected] 2012-2013 Slides grotendeels door: Katrien Verbert

Transcript of 20130221 GB les 3

Page 1: 20130221 GB les 3

relationele algebrarelationele calculus

Matthijs van [email protected]

2012-2013

Slides grotendeels door: Katrien Verbert

Page 2: 20130221 GB les 3

inhoud deze les

• Relationele algebra

• Relationele calculus– Tupel relationele calculus

– Domein relationele calculus

2

Page 3: 20130221 GB les 3

relationeel model?

3

Page 4: 20130221 GB les 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

Page 5: 20130221 GB les 3

5

Page 6: 20130221 GB les 3

relationele vraagtalen

• vraagtaal (query language) = gegevensmanipulatietaal

• biedt functionaliteit voor– opvragen

– toevoegen

– verwijderen

– wijzigen

van gegevens

6

Page 7: 20130221 GB les 3

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

Page 8: 20130221 GB les 3

relationele algebra

8

Page 9: 20130221 GB les 3

relationele algebra

• verzamelingsoperatoren– unie, doorsnede, verschil, cartesisch product

• relationele operatoren– selectie, projectie, join, deling, hernoeming

• unaire of binaire operatoren

9

Page 10: 20130221 GB les 3

selectie

10

Page 11: 20130221 GB les 3

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

Page 12: 20130221 GB les 3

voorbeelden

• DNO=4 (EMPLOYEE)

• SALARY > 30000 (EMPLOYEE)

• (DNO = 4 SALARY > 25000) v (DNO = 5 SALARY > 30000)(EMPLOYEE)

12

Page 13: 20130221 GB les 3

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

Page 14: 20130221 GB les 3

oplossing

(Boats' ' ' '

)color red color green

Page 15: 20130221 GB les 3

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

Page 16: 20130221 GB les 3

projectie

16

Page 17: 20130221 GB les 3

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

Page 18: 20130221 GB les 3

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

Page 19: 20130221 GB les 3

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

Page 20: 20130221 GB les 3

20

Page 21: 20130221 GB les 3

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)

Page 22: 20130221 GB les 3

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))

Page 23: 20130221 GB les 3

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

Page 24: 20130221 GB les 3

(a) FNAME, LNAME, SALARY ( DNO = 5 (EMPLOYEE ) )

(b) zelfde met tussenresultaat en hernoeming van attributen

Page 25: 20130221 GB les 3

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

Page 26: 20130221 GB les 3

RESULT RESULT1 RESULT2

26

Page 27: 20130221 GB les 3

27

Page 28: 20130221 GB les 3

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

Page 29: 20130221 GB les 3

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

Page 30: 20130221 GB les 3

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

Page 31: 20130221 GB les 3

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

Page 32: 20130221 GB les 3

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

Page 33: 20130221 GB les 3

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

Page 34: 20130221 GB les 3

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

Page 35: 20130221 GB les 3

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

Page 36: 20130221 GB les 3

(a) PROJ_DEPT PROJECT DEPARTMENT

(b) DEPT_LOCS DEPARTMENT DEPT_LOCATIONS

Page 37: 20130221 GB les 3

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

Page 38: 20130221 GB les 3

Find names of sailors who have reserved boat #103

• Oplossing 1:

• Oplossing 2:

103(( Reserves)*Sailors)sname bid

( (Reserves*Sailors))103sname bid

Page 39: 20130221 GB les 3

fundamentele operatoren

39

Page 40: 20130221 GB les 3

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

Page 41: 20130221 GB les 3

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

Page 42: 20130221 GB les 3

SSNS(SSN) SSN_PNOS SMITH_PNOST R S

Page 43: 20130221 GB les 3

43

Page 44: 20130221 GB les 3

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

Page 45: 20130221 GB les 3

Find the names of sailors who have reserved all boats

Tempsids (Reserves) (Boats),sid bid bid

(Tempsids*Sailors)sname

Page 46: 20130221 GB les 3

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

Page 47: 20130221 GB les 3

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

Page 48: 20130221 GB les 3

(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 )

Page 49: 20130221 GB les 3

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

Page 50: 20130221 GB les 3

50

Page 51: 20130221 GB les 3

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

Page 52: 20130221 GB les 3

TEMP  ( EMPLOYEE  Ssn = Mgr_ssn DEPARTMENT )

RESULT  Fname, Minit, Lname, Dname  ( TEMP )

52

Page 53: 20130221 GB les 3

+

-

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

Page 54: 20130221 GB les 3

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

Page 55: 20130221 GB les 3

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

Page 56: 20130221 GB les 3

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

Page 57: 20130221 GB les 3

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

Page 58: 20130221 GB les 3

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

Page 59: 20130221 GB les 3

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

Page 60: 20130221 GB les 3

VRAGEN?

60

Page 61: 20130221 GB les 3

relationele calculus

61

Page 62: 20130221 GB les 3

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

Page 63: 20130221 GB les 3

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

Page 64: 20130221 GB les 3

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

Page 65: 20130221 GB les 3

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

Page 66: 20130221 GB les 3

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

Page 67: 20130221 GB les 3

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

Page 68: 20130221 GB les 3

voorbeeld

• { t | EMPLOYEE(t) and t.SALARY > 50000 }

68

connector

vergelijkingsoperator

constante

variabele

Page 69: 20130221 GB les 3

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’ }

Page 70: 20130221 GB les 3

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

Page 71: 20130221 GB les 3

oefening: geef alle rode of groene boten

{t | Boats(t) and (t.color=‘red’ or t.color=‘green’)}

71

Page 72: 20130221 GB les 3

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

Page 73: 20130221 GB les 3

{ 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

Page 74: 20130221 GB les 3

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

Page 75: 20130221 GB les 3

{ 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’

Page 76: 20130221 GB les 3

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

Page 77: 20130221 GB les 3

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

Page 78: 20130221 GB les 3

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

Page 79: 20130221 GB les 3

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

Page 80: 20130221 GB les 3

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

Page 81: 20130221 GB les 3

{ 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

Page 82: 20130221 GB les 3

– ( 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

Page 83: 20130221 GB les 3

{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

Page 84: 20130221 GB les 3

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

Page 85: 20130221 GB les 3

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))}

Page 86: 20130221 GB les 3

Quantoren in SQL

• EXISTS

• – bestaat niet:

– gebruik not ( x ): NOT EXISTS

86

Page 87: 20130221 GB les 3

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

Page 88: 20130221 GB les 3

{ 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

Page 89: 20130221 GB les 3

{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

Page 90: 20130221 GB les 3

{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

Page 91: 20130221 GB les 3

{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

Page 92: 20130221 GB les 3

VRAGEN?

92

Page 93: 20130221 GB les 3

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.