Relationale Algebra in SQL transformieren

avoli

Benutzer
Beiträge
6
Nabend,
bin Neuling in Sachen "Datenbanken" und bin gerade im Kapitel "Relationale Algebra". Dort gab es eine kleinere Übung die ich bearbeitet habe und wollte jetzt anschließend dies in SQL "umwandeln" um zu sehen, ob mir die richtigen Datensätze ausgespuckt werden. Folgendes liegt mir vor:

ErsteR <- SELECT Dauer >= 5 (Tabelle2)
ZwoteR<- (ErsteR Join ProjektNr = Projekt Nr Tabelle1)
Resultat<- PROJEKTION Projektname(ZwoteR)

Wie würde dies in SQL aussehen ?
SELECT Projektname
FROM Tabelle1
(*???* Join Tabelle2 ON ProjektNr = ProjektNr)
WHERE Dauer >=5

Das war mein Ansatz. Über Hilfe würde ich mich sehr freuen! Schönen Abend noch =)
Ps. Ich benutze MariaDB
 
Werbung:
Wir können hier nur raten, was Du genau machen willst. Wenn Du eine DB hast, warum probierst Du es nicht mal selber aus? Ein PostgreSQL oder MariaDB ist schnell installiert, damit kann man schnell üben, testen, probieren. Das tut meist auch nicht weiter weh.
 
Wir können hier nur raten, was Du genau machen willst
Wie ich bereits sagte, möchte ich dieses Relationale Datenmodell:
ErsteR <- SELECT Dauer >= 5 (Tabelle2)
ZwoteR<- (ErsteR Join ProjektNr = Projekt Nr Tabelle1)
Resultat<- PROJEKTION Projektname(ZwoteR)
in SQL abbilden.
warum probierst Du es nicht mal selber aus?
Na ich hatte doch vor es zu testen !? Ich habe doch geschrieben, dass ich das in SQl abbilden wollte, aber ich nicht genau weiß, wie ich das in SQL "übersetzen" kann! Darum bin ich doch hier...
 
So sehen die beiden Tabellen aus (links Tabelle1 und rechts Tabelle2):

Die Tabellen habe ich schon samt Daten angelegt, das ist nicht das Problem.
 
Sorry, ich kann damit nicht viel anfangen:

Code:
ErsteR <- SELECT Dauer >= 5 (Tabelle2)
ZwoteR<- (ErsteR Join ProjektNr = Projekt Nr Tabelle1)
Resultat<- PROJEKTION Projektname(ZwoteR)

Daher hier mal in SQL (PostgreSQL):

Code:
test=# create table projekt_stammdaten(id serial primary key, name text);
CREATE TABLE
test=*# create table projekt_gearbeitet (id serial primary key, projekt int references projekt_stammdaten, gearbeitet_von_bis tsrange);
CREATE TABLE
test=*# insert into projekt_stammdaten values (1, 'Projekt 1');
INSERT 0 1
test=*# insert into projekt_stammdaten values (2, 'Projekt 2');
INSERT 0 1
test=*# insert into projekt_gearbeitet values (1, 1, '[2017-05-12 10:00:00,2017-05-12 14:00:00)');
INSERT 0 1
test=*# insert into projekt_gearbeitet values (2, 2, '[2017-05-11 09:00:00,2017-05-11 14:00:00)');
INSERT 0 1
test=*# insert into projekt_gearbeitet values (3, 2, '[2017-05-12 11:00:00,2017-05-12 13:00:00)');
INSERT 0 1
test=*# select projekt, sum(upper(gearbeitet_von_bis)-lower(gearbeitet_von_bis)) as arbeit_dauer from projekt_gearbeitet group by projekt;
 projekt | arbeit_dauer
---------+--------------
  1 | 04:00:00
  2 | 07:00:00
(2 Zeilen)

--
-- als Join auf ein Subselect
--

test=*# select projekt_stammdaten.name, x.arbeit_dauer from projekt_stammdaten left join (select projekt, sum(upper(gearbeitet_von_bis)-lower(gearbeitet_von_bis)) as arbeit_dauer from projekt_gearbeitet group by projekt) x on projekt_stammdaten.id=x.projekt where x.arbeit_dauer > '05:00:00'::interval;
  name  | arbeit_dauer
-----------+--------------
 Projekt 2 | 07:00:00
(1 Zeile)


--
-- als JOIN direkt
--
test=*# select projekt_stammdaten.name, sum(upper(projekt_gearbeitet.gearbeitet_von_bis)-lower(projekt_gearbeitet.gearbeitet_von_bis)) as gesamtzeit from projekt_stammdaten left join projekt_gearbeitet on projekt_stammdaten.id = projekt_gearbeitet.projekt group by projekt_stammdaten.name having sum(upper(projekt_gearbeitet.gearbeitet_von_bis)-lower(projekt_gearbeitet.gearbeitet_von_bis)) > '05:00:00'::interval;
  name  | gesamtzeit
-----------+------------
 Projekt 2 | 07:00:00
(1 Zeile)

Vielleicht hilft das Dir ja weiter.
 
Werbung:
Zurück
Oben