SlideShare una empresa de Scribd logo
1 de 100
Descargar para leer sin conexión
relationele algebra
en relationele calculus

Katrien Verbert
Katrien.Verbert@cs.kuleuven.be
inhoud deze les

• Relationele algebra
• Relationele calculus
   – Tupel relationele calculus
   – Domein relationele calculus
• Query By Example (QBE)




                                   2
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
4
relationele vraagtalen

• vraagtaal (query language) = gegevensmanipulatietaal
• biedt functionaliteit voor
   –   opvragen
   –   toevoegen
   –   verwijderen
   –   wijzigen van gegevens




                                                         5
indeling van relationele vraagtalen

• Algebraïsche talen              • Calculustalen
   – steunen op relationele algebra   – steunen op relationele calculus
   – gebruiken operatoren             – gebruiken formele beschrijving
                                        van gewenste info
   – proceduraal
                                          • predikatenlogica
                                      – niet-proceduraal
                                      – 2 soorten:
                                          • tupel-calculus,
                                          • domein-calculus




                                                                          6
relationele algebra


• verzamelingsoperatoren
   – unie, doorsnede, verschil, cartesisch product


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



• unaire of binaire operatoren




                                                     7
selectie




           8
selectie
                <selectiecriterium>(R)

• selecteert een aantal tupels uit een extensie (= rijen uit een tabel)

• resultaat:
    – een relatie (tabel) met zelfde tupelschema
    – deelverzameling van de oorspronkelijke extensie


• selectiecriterium F = (logische) formule
    – enkelvoudige formules: =, ≠, <, >, <=, >=
    – meervoudige formules: logische operatoren , , 

    De selectie van tupels uit extensie r van relatie R onder formule F
    is de verzameling van alle tupels uit r die voldoen aan F:
    F(r) = {t | t  r  t voldoet aan F}
                                                                          9
voorbeelden

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




                                                                 10
oefening: geef alle rode of groene boten
         sid   bid    day
Reserves
         22    101 10/10/96
         58    103 11/12/96
         sid   sname rating        age
Sailors 22     dustin   7          45.0
         31    lubber   8          55.5
         58    rusty    10         35.0
Boats    bid    bname      color
         101   Interlake   Blue
         102   Interlake   Red
         103   Clipper     Green
         104   Marine      Red
oplossing


 color'red'color'green'(Boats)
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
projectie




            14
projectie

              <attributenlijst>(R)
  – doel: een aantal kolommen uit een tabel halen

  – resultaat:
      • verzameling tuples
      • met attributen deelverzameling van attributen van oorspronkelijke tupels
      • verbonden met deelverzameling X van het tupelschema




         De projectie van een extensie r van relatie R op een
         attributenverzameling X is
         X(r) = { t | tupelschema van t is X en  t’  r : t  t’ }
                                                                                   15
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
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
18
Find names of sailors who are younger
 than 50
         sid bid  day               Syntax
Reserves
         22 101 10/10/96
         58 103 11/12/96             selectie: <criterium>(R)
          sid   sname rating age     projectie: <attributen>(R)
Sailors   22    dustin  7    45.0
          31    lubber  8    55.5
          58    rusty   10 35.0
Boats     bid    bname      color
          101   Interlake   Blue
          102   Interlake   Red
          103   Clipper     Green
          104   Marine      Red
Find names of sailors who are younger
 than 50
         sid bid  day               Oplossing:
Reserves                            sname (age<50(Sailors))
         22 101 10/10/96
         58 103 11/12/96
          sid   sname rating age
Sailors   22    dustin  7    45.0
          31    lubber  8    55.5
          58    rusty   10 35.0
Boats     bid    bname      color
          101   Interlake   Blue
          102   Interlake   Red
          103   Clipper     Green
          104   Marine      Red
hernoeming
– doel: wijziging van attribuutnamen
– notatie: nieuwe namen tussen haakjes vermeld
– voorbeeld:

     RESULT(Firstname, Lastname, Salary)
                         FNAME, LNAME, SALARY (DEP5_EMPS)




 – hernoeming kan ook met een (unaire) operator  voorgesteld worden


   1.  S(B1, B2,…, Bn) (R)   relatie en attributen worden hernoemd
   2.  S (R)                 alleen relatie wordt hernoemd
   3.  (B1, B2,…, Bn) (R)    alleen attributen worden hernoemd

                                                                      21
(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
        2 relaties R( A1,...,An) en S (B1,...,Bm) zijn vergelijkbaar
                            als en slechts als

        m=n            (d.w.z. R en S hebben dezelfde graad)
        DOM (Ai) = DOM (Bi)     voor 1 ≤ i ≤ n

– schema-behoudend, op attribuutnamen na
    • afspraak: behoud attribuutnamen van 1-ste relatie




                                                                       23
RESULT ← RESULT1 U RESULT2




                             24
25
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
Cartesisch product: voorbeeld
                                  sid    sname rating age
  sid bid  day
                                  22     dustin  7    45.0
  22 101 10/10/96
  58 103 11/12/96                 31     lubber  8    55.5
                                  58     rusty   10 35.0
            R1
                                                 S1

                 (sid) sname    rating   age    (sid)   bid   day
                  22   dustin     7      45.0    22     101   10/10/9
R1 X S1 =         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 )




                                       28
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
join operator
– voorbeeld: combineer voor alle departementen informatie over
  het departement + de manager ervan:

          DEPARTMENT  MGRSSN = SSN EMPLOYEE




 De join van R en S volgens criterium F is
 R  F S = F ( R  S )

                                                                 30
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
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
natural join voorbeeld

sid bid  day           sid    sname rating age
22 101 10/10/96        22     dustin  7    45.0
58 103 11/12/96        31     lubber  8    55.5
        R1             58     rusty   10 35.0
                                      S1
R1 * S1 =
  sid    sname rating age      bid   day
  22     dustin   7    45.0    101   10/10/96
  58     rusty    10   35.0    103   11/12/96
(a) PROJ_DEPT  PROJECT  DEPARTMENT

(b) DEPT_LOCS  DEPARTMENT  DEPT_LOCATIONS
Find names of sailors who have reserved
 boat #103
         sid bid  day               Syntax
Reserves
         22 101 10/10/96
         58 103 11/12/96             selectie: <criterium>(R)
          sid   sname rating age     projectie: <attributen>(R)
Sailors                              join: R F S
          22    dustin  7    45.0
                                     natural join: R * S
          31    lubber  8    55.5
          58    rusty   10 35.0
Boats     bid    bname      color
          101   Interlake   Blue
          102   Interlake   Red
          103   Clipper     Green
          104   Marine      Red
Find names of sailors who have
reserved boat #103
• Oplossing 1:
                      sname(( bid 103 Reserves)*Sailors)
• Oplossing 2: 

                     sname(          (Reserves*Sailors))
                                bid103
              
fundamentele operatoren




                          37
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(RS)(SR)
   –   ...
   –   zijn niet strikt nodig
   –   wel gemakkelijk


• nog een niet-fundamentele operator:
   – de deling       
                                                               38
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
                                                                      39
        deling geeft SSN's van gevraagde werknemers
41
oefening: find the names of sailors who
 have reserved all boats
         sid bid  day                 Syntax
Reserves 22 101 10/10/96
         58 103 11/12/96               selectie: <criterium>(R)
          sid   sname rating age       projectie: <attributen>(R)
Sailors                                join: R F S
          22    dustin    7    45.0
                                       natural join: R * S
          31    lubber    8    55.5    deling: R  S
          58    rusty     10 35.0
Boats
          bid    bname color
          101   Interlake Blue
          102   Interlake Red
          103   Clipper Green
          104   Marine Red
Find the names of sailors who have
reserved all boats

Tempsid 
       
                     (Reserves)/         (Boats)
            sid ,bid                  bid


    sname(Tempsid *Sailors)
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
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
(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



                                                                    47
48
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
TEMP  ( EMPLOYEE              Ssn = Mgr_ssn DEPARTMENT   )

RESULT   Fname, Minit, Lname, Dname ( TEMP )
                                                              50
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
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
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
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
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
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
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
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
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
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
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
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
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
voorbeeld                 connector          constante


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



                                  vergelijkingsoperator

      variabele




                                                     64
voorbeeld

• Q_0
  – Geef de geboortedatum en het adres van de werknemer (of de
    werknemers) met naam „John Smith‟



        { t.Bdate, t.Address | EMPLOYEE(t) and
          t.Fname = ‘John’ and t.Lname = ‘Smith’ }




                                                             65
oefening: geef alle rode of groene boten

         sid bid  day               Syntax
Reserves
         22 101 10/10/96
         58 103 11/12/96            { t1.A1, ..., tn.An |
                                    COND(t1, t2,..., tn) }
          sid   sname rating age
Sailors
          22    dustin  7    45.0   •ti : tupelvariabele
          31    lubber  8    55.5   •Ai: attribuutnaam,
                                    horende bij de relatie ti
          58    rusty   10 35.0     •COND: een voorwaarde
Boats     bid    bname      color
          101   Interlake   Blue
          102   Interlake   Red
          103   Clipper     Green
          104   Marine      Red
oefening: geef alle rode of groene
boten
{t|Boats(t) and (t.color=‘red’ or t.color=‘green’)}




                                                 67
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
• Q_1
   – Geef naam en adres van alle werknemers die voor het
     'Research' departement werken


    { t.Fname, t.Lname, t.Address | EMPLOYEE(t)
                                    AND (d) (DEPARTMENT(d)
                                         AND d.Dname = 'Research’
                                         AND d.Number = t.Dno) }


vrije tupelvariabelen alleen links van |
EMPLOYEE(t) en DEPARTEMENT(d) specificeren het bereik van t en d
d.Dname = 'Research’           selectievoorwaarde
d.Number = t.Dno               joinvoorwaarde
                                                                    69
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
oefening: find sailors who have reserved
 boat #103
         sid   bid      day        Syntax
Reserves
         22    101 10/10/96
         58    103 11/12/96        { t1.A1, ..., tn.An |
                                   COND(t1, t2,..., tn) }
         sid   sname rating age
Sailors 22     dustin     7   45.0 •ti : tupelvariabele
         31    lubber     8   55.5 •Ai: attribuutnaam, horende
                                   bij de relatie ti
         58    rusty      10 35.0 •COND: een voorwaarde
         bid    bname color        •ti links van "|" = alle
Boats
         101   Interlake Blue      variabelen die vrij
                                   voorkomen (niet gebonden
         102   Interlake Red       door  of ) in de COND
         103   Clipper Green
         104   Marine Red
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
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
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
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
– Q_3: Geef de namen van de werknemers die aan alle projecten
  werken


              { e.Lname, e.Fname |
               EMPLOYEE(e)
               AND
               ( (x) ( NOT (PROJECT(x))
                     OR
                     ( (w) ( WORKS_ON(w)
                          AND w.Essn = e.Ssn
                          AND x.Pnumber = w.Pno ) ) ) ) }


      In woorden: als x een project is, dan moet er een
      overeenkomstig tupel in de works_on tabel bestaan.

                                                                76
{ e.Lname, e.Fname |
             EMPLOYEE(e)
             AND
             ( (x) ( NOT (PROJECT(x))
                   OR
                   ( (w) ( WORKS_ON(w)
                        AND w.Essn = e.Ssn
                        AND x.Pnumber = w.Pno ) ) ) ) }


– (x)(F):
   • moet voldaan zijn voor alle tuples in het universum die aan x kunnen
     worden toegekend
– daarom:
   • (  x ) ( not PROJECT ( x ) )
   • alle tupels die niet tot PROJECT behoren uitsluiten van verdere
     selectievoorwaarde
– verder moet dus gelden voor een employee e dat hij werkt op
  elk project dat niet uitgesloten werd


                                                                            77
• Q_6
  – Geef de namen van alle werknemers zonder personen ten
    laste:



     {e.Fname, e.Lname |
       EMPLOYEE(e) AND
      ( ( d) ( NOT (DEPENDENT(d)) OR NOT (e.Ssn = d.Essn) ) ) }




                                                                   78
oefening: find sailors who reserved all boats

         sid bid  day               Syntax
Reserves
         22 101 10/10/96
         58 103 11/12/96            { t1.A1, ..., tn.An |
                                    COND(t1, t2,..., tn) }
          sid   sname rating age
Sailors
          22    dustin  7    45.0   •ti : tupelvariabele
          31    lubber  8    55.5   •Ai: attribuutnaam,
                                    horende bij de relatie ti
          58    rusty   10 35.0     •COND: een voorwaarde
Boats     bid    bname      color
          101   Interlake   Blue
          102   Interlake   Red
          103   Clipper     Green
          104   Marine      Red
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
Quantoren in SQL

•                         EXISTS
• 
  – bestaat niet:
  – gebruik not (  x ):   NOT EXISTS




                                        81
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
• Q_0
  – Geef geboortedatum en adres van werknemer John B. Smith
    { u v | ( q) ( r) ( s) ( t) ( w) ( x) ( y) ( z)
                                  ( EMPLOYEE ( qrstuvwxyz )
                                    AND q = 'John' AND r = 'B' AND s = 'Smith’ ) }

  – praktisch worden alleen de variabelen gequantificeerd die
    in een voorwaarde voorkomen:

    { u v | ( q) ( r) ( s)
                                ( EMPLOYEE ( qrstuvwxyz )
                                  AND q = 'John' AND r = 'B' AND s = 'Smith’ ) }

  – Andere vorm (constanten direct ingevuld) :

             { u v | (EMPLOYEE('John', 'B', 'Smith', t, u, v, w, x, y, z ) }
                                                                               83
• Q_1
  – Geef naam en adres van alle werknemers die voor
    departement 'Research' werken:


        {q s v | ( z) ( l) ( m) ( EMPLOYEE( qrstuvwxyz ) AND
                               ( DEPARTMENT( lmno )
                               AND l = 'Research' AND m = z) ) }




                                                                   84
– Q_2
   • Geef voor elk project in Stafford nummer, nummer van
     controlerend dept. en de managers familienaam,
     geboortedatum en adres:


         {i k s u v | ( j) ( m) ( n) ( t)
                                ( PROJECT ( h i j k ) AND
                                EMPLOYEE ( q r s t u v w x y z )
                             AND DEPARTMENT ( l m n o )
                                AND k = m AND n = t AND j = 'Stafford' ) }




                                                                             85
• Q_6
        • Geef de namen van alle werknemers zonder personen ten laste:



          {q s | (  t ) (EMPLOYEE ( q r s t u v w x y z )
                          AND ( NOT ( l ) (DEPENDENT ( l m n o p )
                                AND t = l ) ) ) }


        {q s | (  t ) ( EMPLOYEE ( q r s t u v w x y z )
                       AND ( (  l ) ( NOT ( DEPENDENT ( l m n o p ) )
                                        OR NOT t = l ) ) ) ) }




                                                                         86
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
88
– Q_0
   • retrieve the birthdate and address of the employee whose name is „John B. Smith‟
Q_0A
List the social security numbers of employees who work more than
20 hours per week on project number 1

Q_0B
List the social security numbers of employees who work more than
20 hours per week on either project 1 or project 2


            1                             Q_0A


                                          Q_0B met condition box




                                          Q_0B zonder condition box
                          1
                  P.      2    > 20
                                                                   90
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
join
dezelfde variabele in verschillende kolommen zetten




                                                      92
orde van resultaat

• P. AO(m).
   – print in ascending order (m = prioriteit)
• P. DO(n).
   – print in descending order (n = prioriteit)




                                                  93
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
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
• Q_6 List the names of all employees who have no
  dependents




                                                    97
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
• (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
VRAGEN?




          100

Más contenido relacionado

La actualidad más candente (9)

20130214 les gb2
20130214 les gb220130214 les gb2
20130214 les gb2
 
Les 1 inleiding, betekenis afgeleide en rekenregels
Les 1 inleiding, betekenis afgeleide en rekenregelsLes 1 inleiding, betekenis afgeleide en rekenregels
Les 1 inleiding, betekenis afgeleide en rekenregels
 
Integraalrekening 1 les 2
Integraalrekening 1 les 2Integraalrekening 1 les 2
Integraalrekening 1 les 2
 
VWO wiskunde B 2012
VWO wiskunde B 2012VWO wiskunde B 2012
VWO wiskunde B 2012
 
Handleiding r aw van der vaart
Handleiding r   aw van der vaartHandleiding r   aw van der vaart
Handleiding r aw van der vaart
 
Integraalrekening 1 les 3
Integraalrekening 1 les 3Integraalrekening 1 les 3
Integraalrekening 1 les 3
 
SQL - deel 1
SQL - deel 1SQL - deel 1
SQL - deel 1
 
wiskundeA
wiskundeAwiskundeA
wiskundeA
 
Calculus
CalculusCalculus
Calculus
 

Más de Katrien Verbert

Human-centered AI: towards the next generation of interactive and adaptive ex...
Human-centered AI: towards the next generation of interactive and adaptive ex...Human-centered AI: towards the next generation of interactive and adaptive ex...
Human-centered AI: towards the next generation of interactive and adaptive ex...
Katrien Verbert
 
Explaining and Exploring Job Recommendations: a User-driven Approach for Inte...
Explaining and Exploring Job Recommendations: a User-driven Approach for Inte...Explaining and Exploring Job Recommendations: a User-driven Approach for Inte...
Explaining and Exploring Job Recommendations: a User-driven Approach for Inte...
Katrien Verbert
 

Más de Katrien Verbert (20)

Explainability methods
Explainability methodsExplainability methods
Explainability methods
 
Human-centered AI: how can we support end-users to interact with AI?
Human-centered AI: how can we support end-users to interact with AI?Human-centered AI: how can we support end-users to interact with AI?
Human-centered AI: how can we support end-users to interact with AI?
 
Human-centered AI: how can we support end-users to interact with AI?
Human-centered AI: how can we support end-users to interact with AI?Human-centered AI: how can we support end-users to interact with AI?
Human-centered AI: how can we support end-users to interact with AI?
 
Human-centered AI: how can we support lay users to understand AI?
Human-centered AI: how can we support lay users to understand AI?Human-centered AI: how can we support lay users to understand AI?
Human-centered AI: how can we support lay users to understand AI?
 
Explaining job recommendations: a human-centred perspective
Explaining job recommendations: a human-centred perspectiveExplaining job recommendations: a human-centred perspective
Explaining job recommendations: a human-centred perspective
 
Explaining recommendations: design implications and lessons learned
Explaining recommendations: design implications and lessons learnedExplaining recommendations: design implications and lessons learned
Explaining recommendations: design implications and lessons learned
 
Designing Learning Analytics Dashboards: Lessons Learned
Designing Learning Analytics Dashboards: Lessons LearnedDesigning Learning Analytics Dashboards: Lessons Learned
Designing Learning Analytics Dashboards: Lessons Learned
 
Human-centered AI: towards the next generation of interactive and adaptive ex...
Human-centered AI: towards the next generation of interactive and adaptive ex...Human-centered AI: towards the next generation of interactive and adaptive ex...
Human-centered AI: towards the next generation of interactive and adaptive ex...
 
Explainable AI for non-expert users
Explainable AI for non-expert usersExplainable AI for non-expert users
Explainable AI for non-expert users
 
Towards the next generation of interactive and adaptive explanation methods
Towards the next generation of interactive and adaptive explanation methodsTowards the next generation of interactive and adaptive explanation methods
Towards the next generation of interactive and adaptive explanation methods
 
Personalized food recommendations: combining recommendation, visualization an...
Personalized food recommendations: combining recommendation, visualization an...Personalized food recommendations: combining recommendation, visualization an...
Personalized food recommendations: combining recommendation, visualization an...
 
Explaining and Exploring Job Recommendations: a User-driven Approach for Inte...
Explaining and Exploring Job Recommendations: a User-driven Approach for Inte...Explaining and Exploring Job Recommendations: a User-driven Approach for Inte...
Explaining and Exploring Job Recommendations: a User-driven Approach for Inte...
 
Learning analytics for feedback at scale
Learning analytics for feedback at scaleLearning analytics for feedback at scale
Learning analytics for feedback at scale
 
Interactive recommender systems and dashboards for learning
Interactive recommender systems and dashboards for learningInteractive recommender systems and dashboards for learning
Interactive recommender systems and dashboards for learning
 
Interactive recommender systems: opening up the “black box”
Interactive recommender systems: opening up the “black box”Interactive recommender systems: opening up the “black box”
Interactive recommender systems: opening up the “black box”
 
Interactive Recommender Systems
Interactive Recommender SystemsInteractive Recommender Systems
Interactive Recommender Systems
 
Web Information Systems Lecture 2: HTML
Web Information Systems Lecture 2: HTMLWeb Information Systems Lecture 2: HTML
Web Information Systems Lecture 2: HTML
 
Information Visualisation: perception and principles
Information Visualisation: perception and principlesInformation Visualisation: perception and principles
Information Visualisation: perception and principles
 
Web Information Systems Lecture 1: Introduction
Web Information Systems Lecture 1: IntroductionWeb Information Systems Lecture 1: Introduction
Web Information Systems Lecture 1: Introduction
 
Information Visualisation: Introduction
Information Visualisation: IntroductionInformation Visualisation: Introduction
Information Visualisation: Introduction
 

relationele algebra en relationele calculus

  • 1. relationele algebra en relationele calculus Katrien Verbert Katrien.Verbert@cs.kuleuven.be
  • 2. inhoud deze les • Relationele algebra • Relationele calculus – Tupel relationele calculus – Domein relationele calculus • Query By Example (QBE) 2
  • 3. relationele model: herhaling terminologie • relatie: een tabel met kolommen en rijen • attribuut: een kolom van een relatie • tupel: een rij van een relatie. • domein: verzameling van toegelaten waarden voor 1 of meerdere attributen. Voorbeelden zijn “integers”, “strings”, “datum”, … 3
  • 4. 4
  • 5. relationele vraagtalen • vraagtaal (query language) = gegevensmanipulatietaal • biedt functionaliteit voor – opvragen – toevoegen – verwijderen – wijzigen van gegevens 5
  • 6. indeling van relationele vraagtalen • Algebraïsche talen • Calculustalen – steunen op relationele algebra – steunen op relationele calculus – gebruiken operatoren – gebruiken formele beschrijving van gewenste info – proceduraal • predikatenlogica – niet-proceduraal – 2 soorten: • tupel-calculus, • domein-calculus 6
  • 7. relationele algebra • verzamelingsoperatoren – unie, doorsnede, verschil, cartesisch product • relationele operatoren – selectie, projectie, join, deling, hernoeming • unaire of binaire operatoren 7
  • 9. selectie <selectiecriterium>(R) • selecteert een aantal tupels uit een extensie (= rijen uit een tabel) • resultaat: – een relatie (tabel) met zelfde tupelschema – deelverzameling van de oorspronkelijke extensie • selectiecriterium F = (logische) formule – enkelvoudige formules: =, ≠, <, >, <=, >= – meervoudige formules: logische operatoren , ,  De selectie van tupels uit extensie r van relatie R onder formule F is de verzameling van alle tupels uit r die voldoen aan F: F(r) = {t | t  r  t voldoet aan F} 9
  • 10. voorbeelden • DNO=4 (EMPLOYEE) • SALARY > 30000 (EMPLOYEE) •  (DNO = 4  SALARY > 25000) v (DNO = 5  SALARY > 30000)(EMPLOYEE) 10
  • 11. oefening: geef alle rode of groene boten sid bid day Reserves 22 101 10/10/96 58 103 11/12/96 sid sname rating age Sailors 22 dustin 7 45.0 31 lubber 8 55.5 58 rusty 10 35.0 Boats bid bname color 101 Interlake Blue 102 Interlake Red 103 Clipper Green 104 Marine Red
  • 13. 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
  • 14. projectie 14
  • 15. projectie  <attributenlijst>(R) – doel: een aantal kolommen uit een tabel halen – resultaat: • verzameling tuples • met attributen deelverzameling van attributen van oorspronkelijke tupels • verbonden met deelverzameling X van het tupelschema De projectie van een extensie r van relatie R op een attributenverzameling X is X(r) = { t | tupelschema van t is X en  t’  r : t  t’ } 15
  • 16. eigenschappen van projectie • #X(r)≤#r – reden: dubbels worden verwijderd – # X(r) = # r indien X een sleutel bevat • X (Y ( r ) ) enkel gedefinieerd indien X  Y – dus niet commutatief !! • Idempotent – enkel allerlaatste (buitenste) projectie moet uitgevoerd worden : – X1 ( X2 (… ( r ) )...) = X1 ( r ) 16
  • 17. samenstelling van uitdrukkingen • samenstelling in 1 nieuwe uitdrukking – vb. FNAME, LNAME, SALARY ( DNO = 5 ( EMPLOYEE ) ) • opeenvolgende berekeningen met expliciete benoeming van tussenresultaten – DEP5_EMPS  DNO=5 ( EMPLOYEE ) – RESULT  FNAME, LNAME, SALARY (DEP5_EMPS) • selectie en projectie commuteren indien de attributen in het selectiecriterium behoren tot de attributen waarop wordt geprojecteerd – X ( F ( r ) ) = F ( X ( r ) ) indien F enkel attributen in X gebruikt
  • 18. 18
  • 19. Find names of sailors who are younger than 50 sid bid day Syntax Reserves 22 101 10/10/96 58 103 11/12/96 selectie: <criterium>(R) sid sname rating age projectie: <attributen>(R) Sailors 22 dustin 7 45.0 31 lubber 8 55.5 58 rusty 10 35.0 Boats bid bname color 101 Interlake Blue 102 Interlake Red 103 Clipper Green 104 Marine Red
  • 20. Find names of sailors who are younger than 50 sid bid day Oplossing: Reserves sname (age<50(Sailors)) 22 101 10/10/96 58 103 11/12/96 sid sname rating age Sailors 22 dustin 7 45.0 31 lubber 8 55.5 58 rusty 10 35.0 Boats bid bname color 101 Interlake Blue 102 Interlake Red 103 Clipper Green 104 Marine Red
  • 21. hernoeming – doel: wijziging van attribuutnamen – notatie: nieuwe namen tussen haakjes vermeld – voorbeeld: RESULT(Firstname, Lastname, Salary)  FNAME, LNAME, SALARY (DEP5_EMPS) – hernoeming kan ook met een (unaire) operator  voorgesteld worden 1.  S(B1, B2,…, Bn) (R) relatie en attributen worden hernoemd 2.  S (R) alleen relatie wordt hernoemd 3.  (B1, B2,…, Bn) (R) alleen attributen worden hernoemd 21
  • 22. (a)  FNAME, LNAME, SALARY ( DNO = 5 (EMPLOYEE ) ) (b) zelfde met tussenresultaat en hernoeming van attributen
  • 23. Unie , doorsnede , verschil – enkel toegelaten op vergelijkbare ("union compatible") relaties – definitie 2 relaties R( A1,...,An) en S (B1,...,Bm) zijn vergelijkbaar als en slechts als m=n (d.w.z. R en S hebben dezelfde graad) DOM (Ai) = DOM (Bi) voor 1 ≤ i ≤ n – schema-behoudend, op attribuutnamen na • afspraak: behoud attribuutnamen van 1-ste relatie 23
  • 24. RESULT ← RESULT1 U RESULT2 24
  • 25. 25
  • 26. 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
  • 27. Cartesisch product: voorbeeld sid sname rating age sid bid day 22 dustin 7 45.0 22 101 10/10/96 58 103 11/12/96 31 lubber 8 55.5 58 rusty 10 35.0 R1 S1 (sid) sname rating age (sid) bid day 22 dustin 7 45.0 22 101 10/10/9 R1 X S1 = 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
  • 28. 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
  • 29. join operator • binaire operator – combineert gerelateerde tupels van 2 relaties • = cartesisch product + selectie • notatie R F S – met F een selectiecriterium • voorbeeld – ACTUAL_DEPENDENTS  EMPNAMES SSN=ESSN DEPENDENT 29
  • 30. join operator – voorbeeld: combineer voor alle departementen informatie over het departement + de manager ervan: DEPARTMENT  MGRSSN = SSN EMPLOYEE De join van R en S volgens criterium F is R  F S = F ( R  S ) 30
  • 31. soorten joins • Opdeling naargelang van de vorm van de join-voorwaarde F – F = C1  C2  …  Cn • theta-join: elke Ck is van de vorm Ai  Bj met –   { =, <, >, ≤, , ≠ } – DOM (Ai) = DOM (Bj) • speciale gevallen – equi-join: enkel " = " – natuurlijke join • equi-join + weglaten van overtollige attributen (d.w.z. per voorwaarde Ai = Bj enkel Ai of Bj behouden) • notatie: R F S 31
  • 32. vereenvoudigde notaties voor natuurlijke joins • R  X,Y S – met X en Y lijsten van attributen – alle attribuutwaarden moeten aan elkaar gelijk zijn • RS – lijsten X en Y zijn impliciet: bevatten alle attributen die dezelfde naam hebben in R en S 32
  • 33. natural join voorbeeld sid bid day sid sname rating age 22 101 10/10/96 22 dustin 7 45.0 58 103 11/12/96 31 lubber 8 55.5 R1 58 rusty 10 35.0 S1 R1 * S1 = sid sname rating age bid day 22 dustin 7 45.0 101 10/10/96 58 rusty 10 35.0 103 11/12/96
  • 34. (a) PROJ_DEPT  PROJECT  DEPARTMENT (b) DEPT_LOCS  DEPARTMENT  DEPT_LOCATIONS
  • 35. Find names of sailors who have reserved boat #103 sid bid day Syntax Reserves 22 101 10/10/96 58 103 11/12/96 selectie: <criterium>(R) sid sname rating age projectie: <attributen>(R) Sailors join: R F S 22 dustin 7 45.0 natural join: R * S 31 lubber 8 55.5 58 rusty 10 35.0 Boats bid bname color 101 Interlake Blue 102 Interlake Red 103 Clipper Green 104 Marine Red
  • 36. Find names of sailors who have reserved boat #103 • Oplossing 1:  sname(( bid 103 Reserves)*Sailors) • Oplossing 2:   sname( (Reserves*Sailors)) bid103 
  • 38. fundamentele operatoren • de verzameling operatoren {  , , } is volledig: – andere operatoren kunnen op basis van deze gedefinieerd worden. – vandaar de naam: fundamentele operatoren. • niet-fundamentele operatoren: – join combinatie van    –  RS=RS(RS)(SR) – ... – zijn niet strikt nodig – wel gemakkelijk • nog een niet-fundamentele operator: – de deling  38
  • 39. 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 39 deling geeft SSN's van gevraagde werknemers
  • 40.
  • 41. 41
  • 42. oefening: find the names of sailors who have reserved all boats sid bid day Syntax Reserves 22 101 10/10/96 58 103 11/12/96 selectie: <criterium>(R) sid sname rating age projectie: <attributen>(R) Sailors join: R F S 22 dustin 7 45.0 natural join: R * S 31 lubber 8 55.5 deling: R  S 58 rusty 10 35.0 Boats bid bname color 101 Interlake Blue 102 Interlake Red 103 Clipper Green 104 Marine Red
  • 43. Find the names of sailors who have reserved all boats Tempsid    (Reserves)/ (Boats) sid ,bid bid  sname(Tempsid *Sailors)
  • 44. aggregaatfuncties • functies die op verzamelingen waarden uitgevoerd worden – SUM, AVERAGE, MAX, MIN, COUNT • notatie groepering  functies (R) • groepering = verz. attributen op basis waarvan groepering gebeurt • functies = lijst van koppels ( functie, attribuut ) • voorbeeld: Dno  AVERAGE Salary ( EMPLOYEE ) 44
  • 45. aggregaatfuncties • resultaat: tabel met als attributen – attributen uit de groepering – attributen met naam “Functie_attribuut” die het resultaat van de functie op dat attribuut geven • voorbeeld: – Dno  COUNT Ssn, AVERAGE Salary ( EMPLOYEE ) – geeft tabel met attributen: Dno, Count_ssn, Average_salary • groeperingsattributen kunnen weggelaten worden –  aggregaatfunctie toegepast op de hele relatie resultaat: 1 tupel 45
  • 46. (a) R ( Dno, No_of_employees, Average_sal )  Dno  COUNT Ssn, AVERAGE Salary (EMPLOYEE ) (b) Dno  COUNT Ssn, AVERAGE Salary (EMPLOYEE ) (c)  COUNT Ssn, AVERAGE Salary (EMPLOYEE )
  • 47. recursieve sluiting • vb. 1 – vind alle ondergeschikten van persoon Y – = transitieve sluiting van ” X heeft Y als chef " • vb. 2 – in een stamboom-databank van honden: – vind alle voorouders van “zwerver” • niet algemeen uit te drukken in relationele algebra – wel voor bepaald aantal niveaus, bv. vind alle ouders, vind alle grootouders, ... – relationele uitdrukking groeit per niveau dat erbij komt – onbeperkt aantal niveaus zou oneindige uitdrukking geven 47
  • 48. 48
  • 49. uitwendige join • gewone joins, bv. R * S, – leveren over de tupels die niet aan de join voorwaarde voldoen geen enkele informatie op – vb. • lijst van alle werknemers + als ze een departement leiden: naam van dat departement • join geeft enkel werknemers die effectief een departement leiden • linkse uitwendige join – levert info over alle werknemers – + info over het departement dat ze leiden, of nul als ze geen departement leiden • analoog: – rechtse uitwendige join – volledige uitwendige join 49
  • 50. TEMP  ( EMPLOYEE Ssn = Mgr_ssn DEPARTMENT ) RESULT   Fname, Minit, Lname, Dname ( TEMP ) 50
  • 51. varianten op unie • Vereniging van tupels van niet vergelijkbare relaties + • Uitwendige unie: + + – Notatie : Q = R  S + – Attr (Q) = Attr (R)  Attr (S) – nulwaarde voor attributen die niet van toepassing zijn - - • Inwendige unie: - – Notatie : Q = R  S - – Attr(Q) = Attr(R)  - Attr(S) • ( alleen gemeenschappelijke attributen blijven behouden ) 51
  • 52. voorbeelden van queries – Q 1: • Retrieve the name and address of all employees who work for the „Research‟ department RESEARCH_DEPT   DNAME = ‘Research’ ( DEPARTMENT ) RESEARCH_EMPS  ( RESEARCH_DEPT  Dnumber = Dno EMPLOYEE ) RESULT   Fname, Lname, Address ( RESEARCH_EMPS ) 52
  • 53. voorbeelden van queries – Q 3: • Find the names of employees who work on all the projects controlled by department number 5 DEPT5_PROJS ( Pno )   Pnumber ( Dnum = 5 ( PROJECT ) ) EMP_PROJ ( Ssn, Pno )   Essn, Pno ( WORKS_ON ) RESULT_EMP_SSNS  EMP_PROJ  DEPT5_PROJS RESULT   Lname, Fname ( RESULT_EMP_SSNS  EMPLOYEE ) 53
  • 54. voorbeelden van queries – Q 4: • Make a list of projects that involve an employee whose last name is „Smith‟, either as a worker or as a manager of the department that controls the project SMITHS (Essn)   SSN ( Lname = ‘Smith’ ( EMPLOYEE ) ) SMITH_WORKER_PROJ   Pno ( WORKS_ON  SMITHS ) MGRS   Lname, Dnumber (EMPLOYEE  Ssn = Mgr_ssn DEPARTMENT) SMITH_MANAGED_DEPTS (Dnum)   Dnumber ( Lname = ‘Smith’ (MGRS) ) SMITH_MGR_PROJS (Pno)   Pnumber ( SMITH_MANAGED_DEPTS  PROJECT ) RESULT  (SMITH_WORKER_PROJ  SMITH_MGR_PROJS ) 54
  • 55. voorbeelden van queries • Q 5: – List the names of all employees with two or more dependents T1 (Ssn, No_of_dependents)  EssnFCOUNT Dependent_name (DEPENDENT) T2   No_of_dependents  2 ( T1 ) RESULT   Lname, Fname ( T2  EMPLOYEE ) 55
  • 56. voorbeelden van queries • Q 6: – Retrieve the names of employees who have no dependents ALL_EMPS   Ssn ( EMPLOYEE ) EMPS_WITH_DEPS ( Ssn )   Essn ( DEPENDENT ) EMPS_WITHOUT_DEPS  ALL_EMPS EMPS_WITH_DEPS RESULT   Lname, Fname ( EMPS_WITHOUT_DEPS  EMPLOYEE ) 56
  • 57. voorbeelden van queries – Q 7: • List the names of managers who have at least one dependent MGS ( Ssn )   Mgr_ssn ( DEPARTMENT ) EMPS_WITH_DEPS ( Ssn )   Essn ( DEPENDENT ) MGRS_WITH_DEPS  MGRS  EMPS_WITH_DEPS RESULT   Lname, Fname ( MGRS_WITH_DEPS  EMPLOYEE ) 57
  • 58. relationele calculus • vragen stellen d.m.v. omschrijving van de resultaatverzameling – relationele algebra beschrijft operaties om tot het resultaat te komen ( b.v. projecteer, ...)  proceduraal – relationele calculus beschrijft condities waaraan het resultaat moet voldoen  declaratief • omschrijving wordt gegeven in predikatenlogica • relationele calculus omvat – tupelcalculus: maakt gebruik van tupelvariabelen – domeincalculus: domeinvariabelen stellen een attribuutwaarde voor 58
  • 59. ter herinnering: propositielogica • propositie – bewering die waar of onwaar zijn – aangegeven door middel van 1 symbool: p, q, ... • operatoren – ontkenning  – conjunctie  – disjunctie  – implicatie  – equivalentie ↔ • samengestelde beweringen – een of meer symbolen – operatoren 59
  • 60. predikatenlogica • (eerste orde) predikatenlogica – maakt gebruik van variabelen – predikaat = bewering over objecten – formules verwijzen expliciet naar die objecten (d.m.v. variabelen, constanten, functies) – quantificatie van variabelen:  ,  – predikatenlogica van de eerste orde: • achter  en  staan alleen variabelen, geen complete verzamelingen • relationele calculus gebruikt eerste orde predikatenlogica 60
  • 61. tupel relationele calculus • Basisvormen van query: { t | formule(t) } { t.A1, t.A2, ..., t.An | formule(t) } – t : tupel variabele – formule : voorwaarde (of predikaat) beschrijft de condities waaraan t moet voldoen om in het resultaat voor te komen – attribuut van tupelvariabele selecteren: t.ATTR • voorbeelden: – { t | EMPLOYEE(t) and t.SALARY > 50000 } – { t.FNAME, t.LNAME | EMPLOYEE(t) and t.SALARY > 50000 } 61
  • 62. algemene uitdrukking in tupelcalculus { t1.A1, t2.A2, ..., tn.An | COND(t1, t2,... tn, tn+1,..., tn+m) } – ti : tupelvariabele (niet noodzakelijk verschillend) – Ai: attribuutnaam, horende bij de relatie ti – COND: een voorwaarde (of “well formed formula” - WFF) – ti links van "|" = alle variabelen die vrij voorkomen (niet gebonden door  of ) in de COND 62
  • 63. conditie • COND bestaat uit – atomen + logische connectoren + quantificatoren • een atoom is van de vorm: – R(ti) R: relatienaam, ti: tupelvariable – ti.A  tj.B   { <,>,=, , ,  } en A attribuut van ti, B attribuut van tj – ti.A  c of c  tj.B   { <,>,=, , ,  } en c een constante • waarde van een atoom: true of false 63
  • 64. voorbeeld connector constante • { t | EMPLOYEE(t) and t.SALARY > 50000 } vergelijkingsoperator variabele 64
  • 65. voorbeeld • Q_0 – Geef de geboortedatum en het adres van de werknemer (of de werknemers) met naam „John Smith‟ { t.Bdate, t.Address | EMPLOYEE(t) and t.Fname = ‘John’ and t.Lname = ‘Smith’ } 65
  • 66. oefening: geef alle rode of groene boten sid bid day Syntax Reserves 22 101 10/10/96 58 103 11/12/96 { t1.A1, ..., tn.An | COND(t1, t2,..., tn) } sid sname rating age Sailors 22 dustin 7 45.0 •ti : tupelvariabele 31 lubber 8 55.5 •Ai: attribuutnaam, horende bij de relatie ti 58 rusty 10 35.0 •COND: een voorwaarde Boats bid bname color 101 Interlake Blue 102 Interlake Red 103 Clipper Green 104 Marine Red
  • 67. oefening: geef alle rode of groene boten {t|Boats(t) and (t.color=‘red’ or t.color=‘green’)} 67
  • 68. gebonden en vrije variabelen • een tupelvariabele t is gebonden als ze gequantificeerd is (met een quantor  of  voorkomt) • voorbeelden: F1: d.DNAME = „Research‟ F2: (  t ) ( d.DNUMBER = t.DNO ) F3: (  d ) ( d.MGSSN = „333445555‟ ) d is vrij in F1 en in F2 d is gebonden met  in F3 t is gebonden met  in F2 68
  • 69. • Q_1 – Geef naam en adres van alle werknemers die voor het 'Research' departement werken { t.Fname, t.Lname, t.Address | EMPLOYEE(t) AND (d) (DEPARTMENT(d) AND d.Dname = 'Research’ AND d.Number = t.Dno) } vrije tupelvariabelen alleen links van | EMPLOYEE(t) en DEPARTEMENT(d) specificeren het bereik van t en d d.Dname = 'Research’ selectievoorwaarde d.Number = t.Dno joinvoorwaarde 69
  • 70. quantoren • Existentiële quantor:  (er bestaat) • Universele quantor:  (voor alle) • (t)(formule(t)) – er bestaat een tupel t die aan de conditie voldoet – bv. (t)(EMPLOYEE(t) and t.fname=„John‟) • (t)(formule(t)) – alle tuples in het universum voldoen aan de conditie 70
  • 71. oefening: find sailors who have reserved boat #103 sid bid day Syntax Reserves 22 101 10/10/96 58 103 11/12/96 { t1.A1, ..., tn.An | COND(t1, t2,..., tn) } sid sname rating age Sailors 22 dustin 7 45.0 •ti : tupelvariabele 31 lubber 8 55.5 •Ai: attribuutnaam, horende bij de relatie ti 58 rusty 10 35.0 •COND: een voorwaarde bid bname color •ti links van "|" = alle Boats 101 Interlake Blue variabelen die vrij voorkomen (niet gebonden 102 Interlake Red door  of ) in de COND 103 Clipper Green 104 Marine Red
  • 72. oefening: find sailors who have reserved boat #103 {s | Sailors(s) and ( R)(Reserves(R) and R.sid = S.sid and R.bid = 103)} 72
  • 73. gebruik van universele quantoren • (x) (P(x)) – waar als P(x) waar is voor elke x van het universum – bv. (x) (x.color = “Rood”) – betekent dat alles wat bestaat rood is • logische implicatie – (x) (Boot(x)  (x.color = “Rood”)) – (x) IF Boot(x) THEN (x.color = “Rood”) – Als x een boot is, dan moet de kleur rood zijn 73
  • 74. gebruik van universele quantoren •  is een logische implicatie – a  b betekent dat als a waar is, ook b waar moet zijn – a  b is hetzelfde als a  b • (x) (x.dnum=5  F2) • (x) IF x.dnum=5 THEN F2 • (x) (not (x.dnum=5) or F2) – x.dnum=5: F2 moet waar zijn 74
  • 75. gebruik van universele quantoren • (x) (Boot(x)  (x.color = „Rood‟)) •  is een logische implicatie – als x een boot is, dan moet de kleur rood zijn • (x) (Boot(x)  x.color = „Rood‟) – X is geen boot: conditie is waar – X is een boot: x.color=„Rood‟ moet waar zijn 75
  • 76. – Q_3: Geef de namen van de werknemers die aan alle projecten werken { e.Lname, e.Fname | EMPLOYEE(e) AND ( (x) ( NOT (PROJECT(x)) OR ( (w) ( WORKS_ON(w) AND w.Essn = e.Ssn AND x.Pnumber = w.Pno ) ) ) ) } In woorden: als x een project is, dan moet er een overeenkomstig tupel in de works_on tabel bestaan. 76
  • 77. { e.Lname, e.Fname | EMPLOYEE(e) AND ( (x) ( NOT (PROJECT(x)) OR ( (w) ( WORKS_ON(w) AND w.Essn = e.Ssn AND x.Pnumber = w.Pno ) ) ) ) } – (x)(F): • moet voldaan zijn voor alle tuples in het universum die aan x kunnen worden toegekend – daarom: • (  x ) ( not PROJECT ( x ) ) • alle tupels die niet tot PROJECT behoren uitsluiten van verdere selectievoorwaarde – verder moet dus gelden voor een employee e dat hij werkt op elk project dat niet uitgesloten werd 77
  • 78. • Q_6 – Geef de namen van alle werknemers zonder personen ten laste: {e.Fname, e.Lname | EMPLOYEE(e) AND ( ( d) ( NOT (DEPENDENT(d)) OR NOT (e.Ssn = d.Essn) ) ) } 78
  • 79. oefening: find sailors who reserved all boats sid bid day Syntax Reserves 22 101 10/10/96 58 103 11/12/96 { t1.A1, ..., tn.An | COND(t1, t2,..., tn) } sid sname rating age Sailors 22 dustin 7 45.0 •ti : tupelvariabele 31 lubber 8 55.5 •Ai: attribuutnaam, horende bij de relatie ti 58 rusty 10 35.0 •COND: een voorwaarde Boats bid bname color 101 Interlake Blue 102 Interlake Red 103 Clipper Green 104 Marine Red
  • 80. oefening: find sailors who reserved all boats {s | Sailors(s) and ( x)(not Boats(x) or ( r) (Reserves(r) and r.sid = s.sid and x.bid = r.bid))} 80
  • 81. Quantoren in SQL •  EXISTS •  – bestaat niet: – gebruik not (  x ): NOT EXISTS 81
  • 82. domein relationele calculus – Analoog aan tupelcalculus, maar variabelen verwijzen naar een attribuutwaarde i.p.v. een heel tupel – Vorm van query: { x1, ..., xn | COND (x1, x2, ..., xn+m ) } – Voorbeeld: • { v f | EMPLOYEE ( v, m, f, s, b, a, g, w, c, d ) } – COND = atomen + connectoren + quantoren • is een WWF (well formed formule) • net als bij tupelcalculus • atoom = R(x1,...,xn) of "xi  xj" of "xi  c"} met R een relatienaam,   { <, >, =,    } en c een constante 82
  • 83. • Q_0 – Geef geboortedatum en adres van werknemer John B. Smith { u v | ( q) ( r) ( s) ( t) ( w) ( x) ( y) ( z) ( EMPLOYEE ( qrstuvwxyz ) AND q = 'John' AND r = 'B' AND s = 'Smith’ ) } – praktisch worden alleen de variabelen gequantificeerd die in een voorwaarde voorkomen: { u v | ( q) ( r) ( s) ( EMPLOYEE ( qrstuvwxyz ) AND q = 'John' AND r = 'B' AND s = 'Smith’ ) } – Andere vorm (constanten direct ingevuld) : { u v | (EMPLOYEE('John', 'B', 'Smith', t, u, v, w, x, y, z ) } 83
  • 84. • Q_1 – Geef naam en adres van alle werknemers die voor departement 'Research' werken: {q s v | ( z) ( l) ( m) ( EMPLOYEE( qrstuvwxyz ) AND ( DEPARTMENT( lmno ) AND l = 'Research' AND m = z) ) } 84
  • 85. – Q_2 • Geef voor elk project in Stafford nummer, nummer van controlerend dept. en de managers familienaam, geboortedatum en adres: {i k s u v | ( j) ( m) ( n) ( t) ( PROJECT ( h i j k ) AND EMPLOYEE ( q r s t u v w x y z ) AND DEPARTMENT ( l m n o ) AND k = m AND n = t AND j = 'Stafford' ) } 85
  • 86. • Q_6 • Geef de namen van alle werknemers zonder personen ten laste: {q s | (  t ) (EMPLOYEE ( q r s t u v w x y z ) AND ( NOT ( l ) (DEPENDENT ( l m n o p ) AND t = l ) ) ) } {q s | (  t ) ( EMPLOYEE ( q r s t u v w x y z ) AND ( (  l ) ( NOT ( DEPENDENT ( l m n o p ) ) OR NOT t = l ) ) ) ) } 86
  • 87. QBE = Query By Example • was een der eerste grafische query talen • geïllustreerd a.h.v. QMF-implementatie (DB2, ...) • queries worden uitgedrukt d.m.v. een voorbeeld – maakt gebruik van skelet-tabellen of sjablonen – gebruiker vult die in naargelang het gewenste soort resultaat – voorbeelden (= variabelen) beginnen met _ – constanten worden letterlijk ingegeven • evt. met operator, bv. >20 • 20 is equivalent met =20 – P. : print: dit moet in het resultaat zichtbaar zijn 87
  • 88. 88
  • 89. – Q_0 • retrieve the birthdate and address of the employee whose name is „John B. Smith‟
  • 90. Q_0A List the social security numbers of employees who work more than 20 hours per week on project number 1 Q_0B List the social security numbers of employees who work more than 20 hours per week on either project 1 or project 2 1 Q_0A Q_0B met condition box Q_0B zonder condition box 1 P. 2 > 20 90
  • 91. algemene regels • condities op 1 rij staan in AND-verband • condities op verschillende rijen staan in OR-verband • aparte "condition box" voor complexere voorwaarden • "Result" tabel kan expliciet vermeld worden – P. onder naam van tabel i.p.v. bij attributen 91
  • 92. join dezelfde variabele in verschillende kolommen zetten 92
  • 93. orde van resultaat • P. AO(m). – print in ascending order (m = prioriteit) • P. DO(n). – print in descending order (n = prioriteit) 93
  • 94. queries met aggregaatfuncties en groepering • groeperingsoperator: – G. • Aggregaatfuncties: – AVG., SUM., CNT., MAX., MIN. – bij default toegepast op verschillende waarden – indien toe te passen op alle waarden: pefix ALL 94
  • 95.
  • 96. negatie  • gebruik gelijkaardig met NOT EXISTS in SQL – onder tabelnaam: "dit tupel komt niet voor” – niet toegelaten in conditiebox • niet volledig equivalent ( niet relationeel volledig) – althans QMF-implementatie niet • voorbeeld – vind alle employees die aan alle projecten van departement nr. 5 werken – kan niet uitgedrukt worden in de versie van QBE zoals hier besproken 96
  • 97. • Q_6 List the names of all employees who have no dependents 97
  • 98. wijzigingen in de gegevensbank • I. insert aangegeven bij toe voegen tupel • D. delete aangegeven bij de weg te laten tupel • U. Update aangegeven in de te wijzigen kolom • ook weglaten van meerdere tupels tegelijk is mogelijk 98
  • 99. • (a) insert a new EMPLOYEE tuple • (b) delete the tuple with given SSN from EMPLOYEE • (c) increase the salary of „John Smith‟ by 10 % and reassign him to department number 4
  • 100. VRAGEN? 100