relationele algebra
en relationele calculus

dr. Katrien Verbert
Katrien.Verbert@cs.kuleuven.be
inleiding leerstof

1.    relationele algebra en relationele calculus
2.    SQL
3.    vervolg SQL en extra voorbeeld
4.   ...
inhoud deze les

•  Relationele algebra
•  Relationele calculus
   –  Tupel relationele calculus
   –  Domein relationele ...
relationele vraagtalen

•  vraagtaal (query language) = gegevensmanipulatietaal
•  biedt functionaliteit voor
   –    opvr...
indeling van relationele vraagtalen

•  Algebraïsche talen              •  Calculustalen
   –  steunen op relationele alge...
relationele algebra


•  verzamelingsoperatoren
   –  unie, doorsnede, verschil, cartesisch product


•  relationele opera...
selectie




           7
selectie
                 σ<selectiecriterium>(R)

•  selecteert een aantal tupels uit een extensie (= rijen uit een tabel...
voorbeelden

•  σDNO=4 (EMPLOYEE)
•  σSALARY > 30000 (EMPLOYEE)
•  σ (DNO = 4 ∧ SALARY > 25000) v (DNO = 5 ∧ SALARY > 3000...
eigenschappen van selectie

•  behoudt het schema
•  σ(r) ⊆ r; dus kardinaliteit stijgt niet: #(σ(r)) ≤ #r
•  samenstellin...
projectie




            11
projectie

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

  –  resultaat:
      •...
eigenschappen van projectie

•  # π X ( r ) ≤ # r
    –  reden: dubbels worden verwijderd
    –  # πX(r) = # r indien X ee...
samenstelling van uitdrukkingen

 –  samenstelling in 1 nieuwe uitdrukking

     •  vb. πFNAME, LNAME, SALARY ( σDNO = 5 (...
15
hernoeming
–  doel: wijziging van attribuutnamen
–  notatie: nieuwe namen tussen haakjes vermeld
–  voorbeeld:

      RESU...
(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 ...
RESULT ← RESULT1 ∪ RESULT2




                             19
20
Cartesisch product

•  Zij gegeven de relaties
   –  R ( A1,...,An )
   –  S ( B1,...,Bm )
   –  die niet noodzakelijk ver...
FEMALE_EMP
  ← σSEX = ‘F’ (EMPLOYEE)

EMPNAMES
  ← π FNAME, LNAME, SSN (FEMALE_EMP)

EMP_DEPENDENTS
  ← EMPNAMES × DEPENDE...
join operator

•  binaire operator
   –  combineert gerelateerde tupels van 2 relaties
•  = cartesisch product + selectie
...
join operator
–  voorbeeld: combineer voor alle departementen informatie over
   het departement + de manager ervan:

    ...
soorten joins
•  Opdeling naargelang van de vorm van de join-voorwaarde F
   –  F = C1 ∧ C2 ∧ … ∧ Cn


•  theta-join: elke...
vereenvoudigde notaties voor natuurlijke joins

•  R  X,Y S
  –  met X en Y lijsten van attributen
  –  alle attribuutwaa...
(a) PROJ_DEPT ← PROJECT  DEPARTMENT

(b) DEPT_LOCS ← DEPARTMENT  DEPT_LOCATIONS
semi-join

•  natuurlijke join + projectie op attributen van één van de
   2 relaties
•  notatie: R ⋉ S = πR ( R  S )
•  ...
natuurlijke join en semi-join
r                            s




rs                         r⋉s




                     ...
fundamentele operatoren




                          30
fundamentele operatoren

•  de verzameling operatoren {σ, π, ∪, , ×} is volledig:
   –  andere operatoren kunnen op basis ...
deling
•  Q = R ÷ S

   –  ≈ inverse van cartesisch product
       •  ⇔ Q is de maximale relatie waarvoor geldt dat Q × S ...
34
formeel

•  zij gegeven relaties R(X) en S(Y); Y ⊆ X
•  Als Q(Z) = R(X) ÷ S(Y), dan is
   –  Z = X  Y
   –  q = { t | ∀ ts...
36
voorbeelden van queries

     –  Q 2:
         •  For every project located in ‘Stafford’, list the project number, the
  ...
voorstelling d.m.v. een query boom




                                     38
aggregaatfuncties
•  functies die op verzamelingen waarden uitgevoerd worden
   –  SUM, AVERAGE, MAX, MIN, COUNT


•  nota...
aggregaatfuncties
•  resultaat: tabel met als attributen
   –  attributen uit de groepering
   –  attributen met naam “Fun...
(a)  R ( Dno, No_of_employees, Average_sal ) 
                                            ← Dno ℑ COUNT Ssn, AVERAGE Salar...
recursieve sluiting

•  vb. 1
   –  vind alle ondergeschikten van persoon Y
   –  = transitieve sluiting van ” X heeft Y a...
43
voorbeeld

•  voorbeeld
    –  relatie PARENT ( ParentID, ChildID )
•  ouders van hond #12 :
    –  P1 ( DogID ) ← π Paren...
uitwendige join

•  gewone joins, bv. R * S,
   –  leveren over de tupels die niet aan de join voorwaarde voldoen
      ge...
TEMP ← ( EMPLOYEE             Ssn = Mgr_ssn DEPARTMENT ) 

RESULT ← π Fname, Minit, Lname, Dname  ( TEMP ) 
              ...
varianten op unie

•  Vereniging van tupels van niet vergelijkbare relaties
                           +

•  Uitwendige un...
voorbeelden van queries

     –  Q 1:
         •  Retrieve the name and address of all employees who work for the
        ...
voorbeelden van queries

  –  Q 3:
      •  Find the names of employees who work on all the projects controlled by
       ...
voorbeelden van queries
 –  Q 4:
     •  Make a list of projects that involve an employee whose last name is ‘Smith’,
    ...
voorbeelden van queries

•  Q 5:
    –  List the names of all employees with two or more dependents


T1 (Ssn, No_of_depen...
voorbeelden van queries

•  Q 6:
   –  Retrieve the names of employees who have no dependents


  ALL_EMPS ← π Ssn ( EMPLO...
voorbeelden van queries
–  Q 7:
    •  List the names of managers who have at least one
       dependent


 MGS ( Ssn ) ← ...
relationele calculus
•  vragen stellen d.m.v. omschrijving van de
   resultaatverzameling
   –  relationele algebra beschr...
ter herinnering: propositielogica

•  propositie
   –  bewering die waar of onwaar zijn
   –  aangegeven door middel van 1...
predikatenlogica

•  (eerste orde) predikatenlogica
   –  maakt gebruik van variabelen
   –  predikaat = bewering over obj...
tupel relationele calculus
•  Basisvormen van query:

                 { t | formule(t) }
                 { t.A1, t.A2, ....
voorbeeld

•  Q_0
   –  Geef de geboortedatum en het adres van de werknemer (of de
      werknemers) met naam ‘John Smith’...
algemene uitdrukking in tupelcalculus

{ t1.A1, t2.A2, ..., tn.An | COND(t1, t2,... tn, tn+1,..., tn+m) }

–    ti :      ...
conditie

•  COND bestaat uit
   –  atomen + logische connectoren + quantificatoren


•  een atoom is van de vorm:
   –  R...
gebonden en vrije variabelen

•  een tupelvariabele t is gebonden als ze gequantificeerd
   is (met een quantor ∀ of ∃ voo...
•  Q_1
   –  Geef naam en adres van alle werknemers die voor het
      'Research' departement werken


    { t.Fname, t.Ln...
–  Q_2
   •  Geef voor elk project in Stafford het nummer, nummer van het
      controlerend departement, en familienaam, ...
–  Q_8
   •  Geef voor elk werknemer de voor- en familienaam en de voor- en
      familienaam van zijn/haar supervisor



...
–  Q_3’
    •  Geef de naam van elke werknemer die aan een project werkt
       gecontroleerd door departement 5.




  { ...
–  Q_4
   •  Geef een lijst van alle projectnummers van projecten waarin een
      werknemer met familienaam ‘Smith’ betro...
universele quantor ∀

•  steeds omzetbaar tot existentiële
   –  vb:
               ¬ ( ∀ x ) ( P(x) ) ⇔ ( ∃ x ) ( ¬ P(x) ...
transformaties

•    ( ∀ x ) ( P(x) )          ⇔   ¬ ( ∃ x ) ( ¬ P(x) )
•    ( ∃ x ) ( P(x) )          ⇔   ¬ ( ∀ x ) ( ¬ P...
–  Q_3: Geef de namen van de werknemers die aan alle projecten
      gecontroleerd door departement 5 werken

            ...
{ e.Lname, e.Fname |  
              EMPLOYEE(e)  
              AND  
              ( (∀x) ( NOT (PROJECT(x))  
         ...
alternatief, met existentiële quantor

         {e.Lname, e.Fname |  
           EMPLOYEE(e)  
           AND 
           ...
–  Q_6
   •  Geef de namen van alle werknemers zonder personen ten laste:


         {e.Fname, e.Lname |  
           EMPL...
–  Q_7
   •  Geef de namen van alle managers die ten minste één persoon ten laste
      hebben:



  {e.Fname, e.Lname | E...
notie van "veilige" (safe) query

•  levert slechts een eindig aantal tuples als resultaat
•  levert geen resultaten "uit ...
Quantoren in SQL

•  ∃                         EXISTS
•  ∀
   –  bestaat niet:
   –  gebruik not ( ∃ x ):   NOT EXISTS



...
QUEL

•  vraagtaal gebaseerd op tupelcalculus
       •  precieze syntax
       •  uitbreidingen: bv. tellen, groeperen
   ...
domein relationele calculus

  –  Analoog aan tupelcalculus, maar variabelen verwijzen naar een
     attribuutwaarde i.p.v...
•  Q_0
   –  Geef geboortedatum en adres van werknemer John B. Smith

     { u v | (∃ q) (∃ r) (∃ s) (∃ t) (∃ w) (∃ x) (∃ ...
•  Q_1
   –  Geef naam en adres van alle werknemers die voor
      departement 'Research' werken:


         {q s v | (∃ z...
–  Q_2
    •  Geef voor elk project in Stafford nummer, nummer van
       controlerend dept. en de managers familienaam,
 ...
•  Q_6
     •  Geef de namen van alle werknemers zonder personen ten laste:



           {q s | ( ∃ t ) (EMPLOYEE ( q r s...
•  Q_7
     •  Geef de namen van de managers met ten minste één persoon ten
        laste:




             { s q | ( ∃ t ...
QBE = Query By Example

•  was een der eerste grafische query talen
•  geïllustreerd a.h.v. QMF-implementatie (DB2, ...)
•...
84
–  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
1        20 hours per week on proj...
algemene regels

•    condities op 1 rij staan in AND-verband
•    condities op verschillende rijen staan in OR-verband
• ...
join
dezelfde variabele in verschillende kolommen zetten




                                                      88
orde van resultaat

•  P. AO(m).
   –  print in ascending order (m = prioriteit)
•  P. DO(n).
   –  print in descending or...
queries met aggregaatfuncties en groepering

 •  groeperingsoperator:
    –  G.
 •  Aggregaatfuncties:
    –  AVG., SUM., ...
negatie ¬

•  gebruik gelijkaardig met NOT EXISTS in SQL
   –  onder tabelnaam: "dit tupel komt niet voor”
   –  niet toeg...
•  Q_6 List the names of all employees who have no
   dependents




                                                     ...
wijzigingen in de gegevensbank

•  I. insert        aangegeven bij toe voegen tupel
•  D. delete        aangegeven bij de ...
•  (a) insert a new EMPLOYEE tuple
•  (b) delete the tuple with given SSN from EMPLOYEE
•  (c) increase the salary of ‘Joh...
VRAGEN?



Katrien.Verbert@cs.kuleuven.be




                                 96
feedback?

          Les van vandaag    Alle lessen tot nu toe 
goed 




minder 
goed 




                              ...
relationele algebra en relationele calculus
relationele algebra en relationele calculus
relationele algebra en relationele calculus
relationele algebra en relationele calculus
relationele algebra en relationele calculus
Upcoming SlideShare
Loading in...5
×

relationele algebra en relationele calculus

2,578

Published on

Published in: Education, Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,578
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
221
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

relationele algebra en relationele calculus

  1. 1. relationele algebra en relationele calculus dr. Katrien Verbert Katrien.Verbert@cs.kuleuven.be
  2. 2. inleiding leerstof 1.  relationele algebra en relationele calculus 2.  SQL 3.  vervolg SQL en extra voorbeeld 4.  demo Access + JDBC 5.  PHP 6.  functionele afhankelijkheden en normalisatie 2
  3. 3. inhoud deze les •  Relationele algebra •  Relationele calculus –  Tupel relationele calculus –  Domein relationele calculus •  Query By Example (QBE) 3
  4. 4. relationele vraagtalen •  vraagtaal (query language) = gegevensmanipulatietaal •  biedt functionaliteit voor –  opvragen –  toevoegen –  verwijderen –  wijzigen van gegevens 4
  5. 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 5
  6. 6. relationele algebra •  verzamelingsoperatoren –  unie, doorsnede, verschil, cartesisch product •  relationele operatoren –  selectie, projectie, join, deling, hernoeming •  unaire of binaire operatoren 6
  7. 7. selectie 7
  8. 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 selec'e van tupels uit extensie r van rela'e 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}  8
  9. 9. voorbeelden •  σDNO=4 (EMPLOYEE) •  σSALARY > 30000 (EMPLOYEE) •  σ (DNO = 4 ∧ SALARY > 25000) v (DNO = 5 ∧ SALARY > 30000)(EMPLOYEE) 9
  10. 10. eigenschappen van selectie •  behoudt het schema •  σ(r) ⊆ r; dus kardinaliteit stijgt niet: #(σ(r)) ≤ #r •  samenstelling van selecties is commutatief –  volgt uit commutativiteit van "en": •  σF (σG ( r ) ) = σ F( { t ∈ r | t voldoet aan G } ) •  = { t ∈ { t' ∈ r | t' voldoet aan G } | t voldoet aan F } •  = { t ∈ r | t voldoet aan F en G } =σF∧G(r) •  = { t ∈ r | t voldoet aan G en F } •  = σ G ( { t ∈ r | t voldoet aan F } ) •  = σ G (σ F ( r ) ) –  gevolg: •  σ C1 (σ C2 (… (σ Cn ( r ) ) )...) = σ C1 ∧ C2 ∧... ∧ Cn ( r ) 10
  11. 11. projectie 11
  12. 12. 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 projec'e van een extensie r van rela'e R op een   aAributenverzameling X is  πX(r) = { t | tupelschema van t is X en ∃ t’ ∈ r : t ⊆ t’ }  12
  13. 13. 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 ) 13
  14. 14. 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
  15. 15. 15
  16. 16. 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 16
  17. 17. (a) π FNAME, LNAME, SALARY (σ DNO = 5 (EMPLOYEE ) ) (b) zelfde met tussenresultaat en hernoeming van attributen
  18. 18. 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 –  eigenschappen •  ∪ en ∩ zijn commutatief en associatief ( niet); •  wetten van De Morgan; •  ... 18
  19. 19. RESULT ← RESULT1 ∪ RESULT2 19
  20. 20. 20
  21. 21. 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 21
  22. 22. 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 ) 22
  23. 23. 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 23
  24. 24. 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 )  24
  25. 25. 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 25
  26. 26. 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 26
  27. 27. (a) PROJ_DEPT ← PROJECT  DEPARTMENT (b) DEPT_LOCS ← DEPARTMENT  DEPT_LOCATIONS
  28. 28. semi-join •  natuurlijke join + projectie op attributen van één van de 2 relaties •  notatie: R ⋉ S = πR ( R  S ) •  vb. –  informatie over alle personeelsleden die manager van een departement zijn 28
  29. 29. natuurlijke join en semi-join r s rs r⋉s 29
  30. 30. fundamentele operatoren 30
  31. 31. 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 ÷ 31
  32. 32. 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 32 deling geeft SSN's van gevraagde werknemers
  33. 33. 34
  34. 34. formeel •  zij gegeven relaties R(X) en S(Y); Y ⊆ X •  Als Q(Z) = R(X) ÷ S(Y), dan is –  Z = X Y –  q = { t | ∀ ts ∈ s ∃ tr ∈ r : tr [Z] = t en tr [Y] = ts } •  Deling gedefinieerd als afgeleide operatie uit de fundamentele operatoren: –  Q1 ← π Z (R) –  Q2 ← π Z ( (S × Q1) R) –  Q ← Q1 Q2 –  er geldt dat Q = R ÷ S 35
  35. 35. 36
  36. 36. voorbeelden van queries –  Q 2: •  For every project located in ‘Stafford’, list the project number, the controlling department number, and the department manager’s last name, address, and birthdate STAFFORD_PROJS ← σ Plocation = ‘Stafford’ ( PROJECT ) CONTR_DEPT ← (STAFFORD_PROJS  Dnum = DnumberDEPARTMENT) PROJ_DEPT_MGR ← ( CONTR_DEPT  Mgr_ssn = Ssn EMPLOYEE ) RESULT ← π Pnumber, Dnum, Lname, Address, Bdate ( PROJ_DEPT_MGR ) 37
  37. 37. voorstelling d.m.v. een query boom 38
  38. 38. 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 ) 39
  39. 39. 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 40
  40. 40. (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 ) 
  41. 41. 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 42
  42. 42. 43
  43. 43. voorbeeld •  voorbeeld –  relatie PARENT ( ParentID, ChildID ) •  ouders van hond #12 : –  P1 ( DogID ) ← π ParentID (σ ChildID = 12 ( PARENT ) ) •  grootouders: –  P2 ( DogID ) ← π ParentID (PARENT  ChildID=DogID P1) •  overgrootouders: –  P3 ( DogID ) ← π ParentID (PARENT  ChildID=DogID P2) •  ... •  RESULT = P1 ∪ P2 ∪ P3 ∪ … ∪ Pn •  vereist steeds een eindige waarde voor n 44
  44. 44. 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 45
  45. 45. TEMP ← ( EMPLOYEE             Ssn = Mgr_ssn DEPARTMENT )  RESULT ← π Fname, Minit, Lname, Dname  ( TEMP )  46
  46. 46. 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 ) 47
  47. 47. 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 ) 48
  48. 48. 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 ) 49
  49. 49. 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 ) 50
  50. 50. 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 ) 51
  51. 51. 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 ) 52
  52. 52. 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 ) 53
  53. 53. 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 54
  54. 54. 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 55
  55. 55. 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 56
  56. 56. 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 } 57
  57. 57. 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’ } 58
  58. 58. 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 59
  59. 59. 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 60
  60. 60. 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 61
  61. 61. •  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’   selec'evoorwaarde  d.Number = t.Dno    joinvoorwaarde 62
  62. 62. –  Q_2 •  Geef voor elk project in Stafford het nummer, nummer van het controlerend departement, en familienaam, geboortedatum en adres van de manager van dat departement. {p.Pnumber, p.Dnum, m.Lname, m.Bdate, m.Address        | PROJECT(p)      AND EMPLOYEE(m)           AND  p.Loca'on = 'Stafford'          AND  ( (∃d) (DEPARTMENT(d)                         AND  p.Dnum = d.Dnumber                         AND  d.Mgr_ssn = m.Ssn) ) }  63
  63. 63. –  Q_8 •  Geef voor elk werknemer de voor- en familienaam en de voor- en familienaam van zijn/haar supervisor { e.FNAME, e.LNAME, s.FNAME, s.LNAME         | EMPLOYEE(e) AND EMPLOYEE(s)           AND e.Super_ssn = s.Ssn }  64
  64. 64. –  Q_3’ •  Geef de naam van elke werknemer die aan een project werkt gecontroleerd door departement 5. { e.LNAME, e.FNAME         | EMPLOYEE(e)           AND ( (∃ x) (∃ w) ( PROJECT(x) AND WORKS_ON(w)                                        AND x.Dnum = 5                                       AND w.Essn = e.Ssn                                        AND x.Pnumber = w.Pno ) ) }  65
  65. 65. –  Q_4 •  Geef een lijst van alle projectnummers van projecten waarin een werknemer met familienaam ‘Smith’ betrokken is, als werknemer of als manager van het controlerend departement { p.Pnumber | PROJECT(p) and     ( ( (∃ e) (∃ w) ( EMPLOYEE(e) AND WORKS_ON(w)                           AND w.Pno = p.Pnumber                           AND e.Lname = 'Smith'                           AND e.Ssn = w.Essn ) )    OR    ( (∃ m) (∃ d) ( EMPLOYEE(m) and DEPARTMENT(d)                           AND p.Dnum = d.Dnumber                           AND d.Mgr_ssn = m.Ssn                          AND m.Lname = 'Smith’ ) ) ) }  66
  66. 66. universele quantor ∀ •  steeds omzetbaar tot existentiële –  vb: ¬ ( ∀ x ) ( P(x) ) ⇔ ( ∃ x ) ( ¬ P(x) ) •  laat meer natuurlijke formuleringen toe •  wel oppassen: bereik van x moet ergens beperkt worden! –  notie safe expression (veilige uitdrukking) –  levert een eindige verzameling op (zie verder) 67
  67. 67. transformaties •  ( ∀ x ) ( P(x) ) ⇔ ¬ ( ∃ x ) ( ¬ P(x) ) •  ( ∃ x ) ( P(x) ) ⇔ ¬ ( ∀ x ) ( ¬ P(x) ) •  ( ∀ x ) ( P(x) ∧ Q(x) ) ⇔ ¬ ( ∃ x ) ( ¬ P(x) ∨ ¬ Q(x) ) •  ( ∀ x ) ( P(x) ∨ Q(x) ) ⇔ ¬ ( ∃ x ) ( ¬ P(x) ∧ ¬ Q(x) ) •  ( ∃ x ) ( P(x) ∧ Q(x) ) ⇔ ¬ ( ∀ x ) ( ¬ P(x) ∨ ¬ Q(x) ) •  ( ∃ x ) ( P(x) ∨ Q(x) ) ⇔ ¬ ( ∀ x ) ( ¬ P(x) ∧ ¬ Q(x) ) •  ( ∀ x ) ( P(x) ) ⇒ ( ∃ x ) ( P(x) ) •  ¬ ( ∃ x ) ( P(x) ) ⇒ ¬ ( ∀ x ) ( P(x) ) 68
  68. 68. –  Q_3: Geef de namen van de werknemers die aan alle projecten gecontroleerd door departement 5 werken { e.Lname, e.Fname |    EMPLOYEE(e)    AND    ( (∀x) ( NOT (PROJECT(x))              OR              ( NOT (x.Dnum = 5 )              OR              ( (∃w) ( WORKS_ON(w)                       AND w.Essn = e.Ssn                       AND x.Pnumber = w.Pno ) ) ) ) }  Condi'e moet voor alle x gelden → die x‐en waarvoor de bedoelde  condi'e triviaal niet voldaan kan zijn op voorhand uitsluiten:    x is geen project    x is wel een project maar niet nr. 5 
  69. 69. { e.Lname, e.Fname |    EMPLOYEE(e)    AND    ( (∀x) ( NOT (PROJECT(x))              OR              ( NOT (x.Dnum = 5 )              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 •  or ( not ( x.Dnum = 5 ) ) –  alle projecten die niet gecontroleerd zijn door departement 5 uitsluiten –  verder moet dus gelden voor een employee e dat hij werkt op elk project dat niet uitgesloten werd 70
  70. 70. alternatief, met existentiële quantor {e.Lname, e.Fname |     EMPLOYEE(e)     AND    (NOT (∃x) (PROJECT(x)                      AND x.Dnum = 5                      AND NOT (∃ w) (WORKS_ON(w)                                               AND w.Essn = e.Ssn                                              AND x.Pnumber = w.Pno))))}  in woorden: we zoeken alle employees, zodanig dat voor employee e mag er geen project bestaan dat gecontroleerd wordt door dept 5, waaraan deze employee niet werkt 71
  71. 71. –  Q_6 •  Geef de namen van alle werknemers zonder personen ten laste: {e.Fname, e.Lname |     EMPLOYEE(e) AND    (NOT (∃ d) ( DEPENDENT(d) AND e.Ssn = d.Essn )) } {e.Fname, e.Lname  |     EMPLOYEE(e) AND   ( (∀ d) ( NOT (DEPENDENT(d)) OR NOT (e.Ssn = d.Essn) ) ) } 72
  72. 72. –  Q_7 •  Geef de namen van alle managers die ten minste één persoon ten laste hebben: {e.Fname, e.Lname | EMPLOYEE(e)       AND  ( (∃ d) (∃ p) ( DEPARTEMENT(d) AND  DEPENDENT(p)       AND  e.Ssn = d.Mgr_ssn  AND  p.Essn = e.Ssn ) ) }  73
  73. 73. notie van "veilige" (safe) query •  levert slechts een eindig aantal tuples als resultaat •  levert geen resultaten "uit het niets" op •  bv: { t | NOT EMPLOYEE(t) } –  geen enkele beperking op wat het resultaat bevat •  formeel: –  domein van tupel relationele uitdrukking = { voorkomende constanten } U domeinen van attributen van relaties –  uitdrukking is veilig indien resultaattupels enkel elementen uit het domein van de uitdrukking bevatten •  onveilige queries zijn zinloos → vermijden 74
  74. 74. Quantoren in SQL •  ∃ EXISTS •  ∀ –  bestaat niet: –  gebruik not ( ∃ x ): NOT EXISTS 75
  75. 75. QUEL •  vraagtaal gebaseerd op tupelcalculus •  precieze syntax •  uitbreidingen: bv. tellen, groeperen –  dichter bij tupelcalculus dan SQL –  vb: range of e is EMPLOYEE  retrieve (e.Bdate, e.Address)  where e.Fname = 'John'        and e.Minit = 'B'        and e.Lname = 'Smith' 76
  76. 76. 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 77
  77. 77. •  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 ) }  78
  78. 78. •  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) ) }  79
  79. 79. –  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' ) }  80
  80. 80. •  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 ) ) ) ) }  81
  81. 81. •  Q_7 •  Geef de namen van de managers met ten minste één persoon ten laste: { s q | ( ∃ t ) ( ∃ j ) ( ∃ l )                     (  EMPLOYEE ( q r s t u v w x y z )      AND   DEPARTMENT ( h i j k )                       AND   DEPENDENT ( l m n o p )       AND  t = j  AND  t = l   )  }  82
  82. 82. 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 83
  83. 83. 84
  84. 84. –  Q_0 •  retrieve the birthdate and address of the employee whose name is ‘John B. Smith’
  85. 85. Q_0A List the social security numbers of employees who work more than 1 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 P. 2 > 20 86
  86. 86. 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 87
  87. 87. join dezelfde variabele in verschillende kolommen zetten 88
  88. 88. orde van resultaat •  P. AO(m). –  print in ascending order (m = prioriteit) •  P. DO(n). –  print in descending order (n = prioriteit) 89
  89. 89. 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 90
  90. 90. 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 92
  91. 91. •  Q_6 List the names of all employees who have no dependents 93
  92. 92. 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 94
  93. 93. •  (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
  94. 94. VRAGEN? Katrien.Verbert@cs.kuleuven.be 96
  95. 95. feedback? Les van vandaag  Alle lessen tot nu toe  goed  minder  goed  97
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×