Frage von Molimo777, 57

SQL-Abfrage in Datenbanken?

Hallo miteinander, ich habe folgende Aufgabe zu lösen (Prüfungsvorbereitung) und ich hab sogut wie keinen Dunst von der Materie. Ich hoffe ich steig durch wenn ich mal eine Beispiel mit Lösung habe, darum hier die Aufgabe:

Es gilt folgendes Datenbankmodell:

Beet

  • Beet Nr.
  • Beet Art
  • Fläche
  • Lage

Bearbeitung

  • ID
  • Beet Nr.
  • Tätigkeit
  • Woche
  • Arbeitsstunden

Pflanzen

  • ID
  • Pflanzenname
  • Stückpreis

(Beziehungen zwischen Beet und Bearbeitung: 1:∞; zwischen Bearbeitung und Pflanzen: 1:∞)

a) Geben Sie in Tabellenform den Entwurf einer Abfrage, wie viel Arbeitsstunden werden je Beet bei der Frühjarspflanzung benötigt? Diese kann sich über mehrere Wochen erstrecken.

b) Geben Sie die SQL-Abfrage an, welches Beet benötigt welche Pflanzen zu welcehn Kosten zur Frühjahrsbepflanzung?

So ich hoffe mir kann das jemand beantworten. Hilfe durch Google hat mir nichts gebracht, da es einfach viel zu viele Infos zu SQL gibt. Vielen Dank schon mal an alle :)

Antwort
von RakonDark, 26

generell ist sowas schlecht dargestellt ohne Daten ist es unklar

wir wissen leider nicht ob bei Tätigkeit Frühjahrspflanzung steht oder sich das aus den Wochen erschliesst . Entsprechend wäre es entweder die wochen oder eben der vergleich mit dem Feld Tätigkeit='Frühjahrspflanzung' ...

P.S. und das die Felder Leerzeichen haben und deutsche Zeichen ä ist auch so ein Ding was Datenbanken nicht fröhlich macht .


a)

SELECT  ´Beet.Beet Nr.´ , sum(´Bearbeitung.Arbeitsstunden´ )
FROM Beet 
LEFT JOIN Bearbeitung
ON ´Beet.Beet Nr.´ = 'Bearbeitung.Beet Nr.'
WHERE Bearbeitung.Woche > x AND Bearbeitung.Woche < y 
GROUP BY ´Beet.Beet Nr.´



Erklärung :

LEFT JOIN , damit alle Beet Nr aufgelistet werden , also auch bei denen wo keine Arbeit angefallen ist im Frühjar , kann ja durchaus sinnvoll sein .

WHERE grenzt die Wochen ein die das Frühjahr bestimmen

GROUP BY damit die sum der Arbeitstunden pro Beet Nr gebildet werden .


b)

SELECT  ´Beet.Beet Nr.´, Pflanzen.ID,  sum(´Pflanzen.Kosten´ ), 
FROM Beet 
JOIN Bearbeitung
ON ´Beet.Beet Nr.´ = 'Bearbeitung.Beet Nr.'
RIGHT JOIN Pflanzen
ON Bearbeitung.ID = Pflanzen.ID
WHERE Bearbeitung.Woche > x AND Bearbeitung.Woche < y
GROUP BY Pflanzen.ID

Erklärung : hier kann ein  RIGHT JOIN gemacht werden um alle pfanzen anzuzeigen auch dort drauf GROUP BY damit die Summe der Kosten angezeigt wird pro Pflanzen ID .

Kommentar von RakonDark ,

ups bei A und bei B brauch man die Tabelle Beet überhaupt nicht , da es ja alles in der Tabelle Bearbeitung ist ...

Allerdings, will man alle Beete aufzeigen dann brauch man die Tabelle schon , da sonst unbearbeitet gar nicht angezeigt werden ...

Antwort
von perhp, 28

Hallo es ist zwar eine Weile her, dass ich Datenbankabfragen gemacht habe, aber ungefähr müsste es schon stimmen. Fehlt bei der Tabelle pflanzen nicht eine bearbeitungsID, dass du die beiden  Tabellen verbinden kannst?

Hier die Aufgabe b)

SELECT Beet.Beet Art, Pflanzen.Pflanzenname, Pflanzen.Stückpreis

FROM Beet, Pflanzen, Beschreibung

WHERE Beet.BeetNr = Bearbeitung.BeetNr

AND Bearbeitung.ID = Pflanzen.BearbeitungsID

AND Bearbeitung.Tätigkeit = 'Frühjahresbepflanzung'

Kommentar von RakonDark ,

wir hoffen das du das so nie angewendet hast , da es hier einige 1 zu unendlich beziehungen gibt .

Kommentar von perhp ,

Solange es nur 1 zu n Beziehungen sind, kann ich es ja so auch machen oder etwa nicht? Solange man die ID´s den Daten eindeutig zuordnen kann müsste es bei nur einer so einfachen Abfrage doch auch das richtige rauskommen...

Und kann mich auch noch an meine Schulzeit erinnern, wo man solche ähnliche Abfragen ohne join gelöst hat.

Muss aber auch dazu sagen, dass ich jetzt nicht wirklich der Profi in Datenbankabfragen bin, da ich hauptsächlich beim Programmieren schon mehr mit etwas anderem zu tun habe.

Antwort
von Schachpapa, 32

Zu a)

select beet_nr, sum(arbeitsstunden)
from bearbeitung
where tätigkeit = "Frühjahrsbepflanzung"
group by beet_nr

Keine passende Antwort gefunden?

Fragen Sie die Community