relationele algebra en relationele calculus

100
relationele algebra en relationele calculus Katrien Verbert [email protected]

description

 

Transcript of relationele algebra en relationele calculus

Page 1: relationele algebra en relationele calculus

relationele algebra

en relationele calculus

Katrien Verbert

[email protected]

Page 2: relationele algebra en relationele calculus

inhoud deze les

• Relationele algebra

• Relationele calculus

– Tupel relationele calculus

– Domein relationele calculus

• Query By Example (QBE)

2

Page 3: relationele algebra en relationele calculus

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

Page 4: relationele algebra en relationele calculus

4

Page 5: relationele algebra en relationele calculus

relationele vraagtalen

• vraagtaal (query language) = gegevensmanipulatietaal

• biedt functionaliteit voor

– opvragen

– toevoegen

– verwijderen

– wijzigen van gegevens

5

Page 6: relationele algebra en relationele calculus

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

Page 7: relationele algebra en relationele calculus

relationele algebra

• verzamelingsoperatoren

– unie, doorsnede, verschil, cartesisch product

• relationele operatoren

– selectie, projectie, join, deling, hernoeming

• unaire of binaire operatoren

7

Page 8: relationele algebra en relationele calculus

selectie

8

Page 9: relationele algebra en relationele calculus

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

Page 10: relationele algebra en relationele calculus

voorbeelden

• DNO=4 (EMPLOYEE)

• SALARY > 30000 (EMPLOYEE)

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

10

Page 11: relationele algebra en relationele calculus

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 12: relationele algebra en relationele calculus

oplossing

color'red'color'green'

(Boats)

Page 13: relationele algebra en relationele calculus

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

Page 14: relationele algebra en relationele calculus

projectie

14

Page 15: relationele algebra en relationele calculus

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

Page 16: relationele algebra en relationele calculus

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

Page 17: relationele algebra en relationele calculus

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 18: relationele algebra en relationele calculus

18

Page 19: relationele algebra en relationele calculus

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

Page 20: relationele algebra en relationele calculus

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

Page 21: relationele algebra en relationele calculus

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

Page 22: relationele algebra en relationele calculus

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

(b) zelfde met tussenresultaat en hernoeming van attributen

Page 23: relationele algebra en relationele calculus

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

Page 24: relationele algebra en relationele calculus

RESULT ← RESULT1 U RESULT2

24

Page 25: relationele algebra en relationele calculus

25

Page 26: relationele algebra en relationele calculus

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

Page 27: relationele algebra en relationele calculus

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

Page 28: relationele algebra en relationele calculus

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

Page 29: relationele algebra en relationele calculus

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

Page 30: relationele algebra en relationele calculus

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

Page 31: relationele algebra en relationele calculus

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

Page 32: relationele algebra en relationele calculus

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

Page 33: relationele algebra en relationele calculus

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

Page 34: relationele algebra en relationele calculus

(a) PROJ_DEPT PROJECT DEPARTMENT

(b) DEPT_LOCS DEPARTMENT DEPT_LOCATIONS

Page 35: relationele algebra en relationele calculus

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

Page 36: relationele algebra en relationele calculus

Find names of sailors who have

reserved boat #103

• Oplossing 1:

• Oplossing 2:

sname(( bid103Reserves)*Sailors)

sname(bid103(Reserves*Sailors))

Page 37: relationele algebra en relationele calculus

fundamentele operatoren

37

Page 38: relationele algebra en relationele calculus

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

Page 39: relationele algebra en relationele calculus

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

Page 40: relationele algebra en relationele calculus
Page 41: relationele algebra en relationele calculus

41

Page 42: relationele algebra en relationele calculus

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

Page 43: relationele algebra en relationele calculus

Find the names of sailors who have

reserved all boats

)(/)(Re,

Boatsbid

servesbidsid

Tempsid

)*( SailorsTempsidsname

Page 44: relationele algebra en relationele calculus

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

Page 45: relationele algebra en relationele calculus

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

Page 46: relationele algebra en relationele calculus

(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 47: relationele algebra en relationele calculus

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

Page 48: relationele algebra en relationele calculus

48

Page 49: relationele algebra en relationele calculus

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

Page 50: relationele algebra en relationele calculus

TEMP ( EMPLOYEE Ssn = Mgr_ssn DEPARTMENT ) RESULT Fname, Minit, Lname, Dname ( TEMP )

50

Page 51: relationele algebra en relationele calculus

+

-

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

Page 52: relationele algebra en relationele calculus

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

Page 53: relationele algebra en relationele calculus

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

Page 54: relationele algebra en relationele calculus

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

Page 55: relationele algebra en relationele calculus

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

Page 56: relationele algebra en relationele calculus

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

Page 57: relationele algebra en relationele calculus

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

Page 58: relationele algebra en relationele calculus

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

Page 59: relationele algebra en relationele calculus

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

Page 60: relationele algebra en relationele calculus

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

Page 61: relationele algebra en relationele calculus

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

Page 62: relationele algebra en relationele calculus

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

Page 63: relationele algebra en relationele calculus

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

Page 64: relationele algebra en relationele calculus

voorbeeld

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

64

connector

vergelijkingsoperator

constante

variabele

Page 65: relationele algebra en relationele calculus

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

Page 66: relationele algebra en relationele calculus

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

Page 67: relationele algebra en relationele calculus

oefening: geef alle rode of groene

boten

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

67

Page 68: relationele algebra en relationele calculus

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

Page 69: relationele algebra en relationele calculus

{ 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

Page 70: relationele algebra en relationele calculus

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

Page 71: relationele algebra en relationele calculus

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

Page 72: relationele algebra en relationele calculus

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

Page 73: relationele algebra en relationele calculus

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

Page 74: relationele algebra en relationele calculus

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

Page 75: relationele algebra en relationele calculus

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

Page 76: relationele algebra en relationele calculus

{ 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

Page 77: relationele algebra en relationele calculus

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

Page 78: relationele algebra en relationele calculus

{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

Page 79: relationele algebra en relationele calculus

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

Page 80: relationele algebra en relationele calculus

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

Page 81: relationele algebra en relationele calculus

Quantoren in SQL

• EXISTS

– bestaat niet:

– gebruik not ( x ): NOT EXISTS

81

Page 82: relationele algebra en relationele calculus

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

Page 83: relationele algebra en relationele calculus

{ 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

Page 84: relationele algebra en relationele calculus

{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

Page 85: relationele algebra en relationele calculus

{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

Page 86: relationele algebra en relationele calculus

{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

Page 87: relationele algebra en relationele calculus

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

Page 88: relationele algebra en relationele calculus

88

Page 89: relationele algebra en relationele calculus

– Q_0

• retrieve the birthdate and address of the employee whose name is „John B. Smith‟

Page 90: relationele algebra en relationele calculus

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

Page 91: relationele algebra en relationele calculus

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

Page 92: relationele algebra en relationele calculus

join

dezelfde variabele in verschillende kolommen zetten

92

Page 93: relationele algebra en relationele calculus

orde van resultaat

• P. AO(m).

– print in ascending order (m = prioriteit)

• P. DO(n).

– print in descending order (n = prioriteit)

93

Page 94: relationele algebra en relationele calculus

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

Page 95: relationele algebra en relationele calculus
Page 96: relationele algebra en relationele calculus

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

Page 97: relationele algebra en relationele calculus

• Q_6 List the names of all employees who have no

dependents

97

Page 98: relationele algebra en relationele calculus

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

Page 99: relationele algebra en relationele calculus

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

Page 100: relationele algebra en relationele calculus

VRAGEN?

100