Úloha zo skúšky predmetu Databázové systémy:
Mám nasledujúce schéma:
Excavator(EID, Type) - EID is a key
Company(Name, HQLocation) - Name is a key
Work(Name, EID, Site, Date) - All collumns together form a key
Musím napísať tento dotaz v relačnej algebri:
"Which company was digging on exactly one site on 1st of May?"
Neviem, ako to vyjadriť bez súhrnných funkcií (počet) Viem, že ľudia pridávajú tieto funkcie do relačnej algebry, ale počas tejto skúšky nás to zakázalo.
Môžete použiť štandardné nastavenie operácií, rozdelenie, premietanie, výber, pripojenie, kartézsky produkt.
odpovede:
4 pre odpoveď č. 1Zabudol som správnu syntaktickú syntaktickú algebru, ale môžete to urobiť
(Worked on >= 1 site on 1st May)
minus (Worked on > 1 site on 1st May)
--------------------------------------
equals (Worked on 1 site on 1st May)
Riešenie SQL používajúce iba operátorov uvedených v komentároch (za predpokladu, že rename
) je nižšie.
SELECT Name
FROM Work
WHERE Date = "1st May" /*Worked on at least one site on 1st May */
EXCEPT
SELECT W1.Name /*Worked more than one site on 1st May */
FROM Work W1
CROSS JOIN Work W2
WHERE W1.Name = W2.Name
AND W1.Date = "1st May"
AND W2.Date = "1st May"
AND W2.Site <> W2.Site
Predpokladám, že to bude relatívne jednoduché na preklad