Zum Inhalt springen

SQL Übungen, benötige Hilfe


Lions2011

Empfohlene Beiträge

Hallo zusammen,

ich habe eine Daba mit folgenden Tabellen erstellt

mw_kunde:

knr (primary key), firma, status, ort

mw_prod:

pnr (pk), bez, preis

mw_lager:

pnr (fk), ort (pnr und ort pk), menge

mw_auftr

anr (pk), knr (fk), adat, ldat

mw_posit:

anr (fk), pnr (fk) (anr und pnr zusammen pk), menge, vkp

Hierzu habe ich ein paar Fragen:

1.

Folgende Aufgabe soll mit einem Join gelöst werden:

Welche Auftragspositionen von welchen Kunden könnten im gleichen Ort (Ort des Kunden gleich dem Lagerort des Produkts) ausgeliefert werden? Erzeugen Sie eine Liste, die nach ANR sortiert, ANR, PNR, BEZ, Lagerort, KNR sowie firma enthält.

Ich habe die Aufgabe wie folgt gelöst, und möchte gerne wissen, ob die Aufgabe so richtig gelöst ist:

SELECT mw_auftr.anr, mw_prod.pnr, mw_prod.bez, mw_lager.ort, mw_kunde.knr, mw_kunde.firma

FROM mw_prod, mw_lager, mw_auftr, mw_kunde, mw_posit

WHERE mw_kunde.ORT = mw_lager.ORT

AND mw_auftr.ANR = mw_posit.ANR

AND mw_kunde.KNR = mw_auftr.KNR

AND mw_prod.PNR = mw_lager.PNR

AND mw_prod.PNR = mw_posit.PNR

ORDER BY mw_auftr.ANR;

2.

Erzeugen Sie eine Liste aller Kunden, die denselben Statuswert haben wie der Kunde 'Danninger'. (Statuswert von Danninger = 30).

Meine Lösung:

SELECT * FROM mw_kunde

WHERE mw_kunde.STATUS = 30;

Ist das so richtig bzw. welche Lösung gibt es noch, es soll hier nämlich zwei Lösungsmöglichkeiten geben.

Bei den folgenden Aufgaben bin ich nicht auf die Lösung gekommen. Es wäre nett, wenn ihr mir dabei helfen könntet.

3.

Eine Statuserhöhung um 5 soll bei all jenen Kunden vorgenommen werden, deren Auftragssumme über 10.000 Euro liegt.

4.

Es sind alle Kunden aus der Kundentabelle zu löschen, von denen derzeit kein Auftrag vorliegt.

5. VIEW

Erzeugen Sie ein VIEW auf die Relation Kunde, die nur Großkunden, also Kunden mit einem Statuswert größer als 25, zeigt.

6. Trigger

Schreiben Sie für das Relationenschema mw_Posit einen Trigger, der folgende Bedingung garantiert:

Neu aufgenommene Auftragspositionen sind stets durch den eigenen (gesamten) Lagerbestand bzw. einer zusätzlich genügend großen Neubestellung beim eigenen Zulieferer zur Sicherstellung der später anstehenden Auslieferung gedeckt.

Vorarbeitung:

Sie erzeugen zunächst ein neues Relationenscheme Disposition (kurz: Dispo) mit folgenden Attributen:

PNR, Lagerbestand (Menge), Neubestellung (BES), Reserviert (RES). Alle Attribute sind vom Typ Number.

Das bestehende relationenschema mw_prod ist um das Attribut Bezugsmenge (BEZM), ebenfalls vom Typ Number, zu erweitern.

Durchführung

Für jede neue Auftragsposition ist ein EIntrag in die Tabelle DISPO einzufügen.

In das Attribut RES ist der Wert der bestellten Menge einzufügen, wenn der Lagerbestand größer ist als die bestellte Menge.

In das Attribut BES ist der Wert der Bezugsmenge des Produktes bzw. ein vielfaches einzufügen, wenn der Lagerbestand alleine nicht ausreicht, um die bestellte Menge abzudecken.

Für ein Produkt bereits vorhandene Einträge in der Tabelle DISPO bleiben bei der Berechnung unberücksichtigt.

Beachten Sie, dass sie zur Lösung der Aufgabe die bisher verwendeten Relationen soweit als möglich mit einbeziehen.

Konkrete Tupelausprägungen für das Durchspielen des Szenarios geben Sie sich - soweit nicht schon geschehen - selbst vor!

Vielen dank schon mal im Voraus

Martin

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gut, dann will ich mal versuchen, zu antworten.

1. sieht gut aus

2. ich denke, du solltest den wert (30) im SQL ermitteln.

Das geht dann mit zwei Möglichkeiten eines Subselects

3. ungefähr so:

Update mw_kunde

SET Status = Status + 5

where knr IN (select knr from mw_auftr, (weitere Tabellen)

where (Join zwischen tabellen)

group by knr

having sum(menge*vkp) > 10000)

4.

(a) DELETE from mw_kunde where not exists (select * from mw_auftr

where mw_auftr.knr = mw_kunde.knr)

(B) DELETE from mw_kunde where knr not IN (select KNR from mw_auftr)

5. CREATE View grosskunden (knr, firma, status, ort)

AS select knr, firma, status, ort from mw_kunde where status > 25

6. Trigger sind DB-spezifisch. Wenn DB2, dann kann ich Dir was schreiben. Bei Oracle oder mySql muss ich passen

Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dann stell doch bitte mal konkrete Fragen. Denn deine Hausaufgaben sollst du ja schließlich machen und nicht irgendwer aus dem Forum. Denn so lernst du nichts und stehst bei einer ähnlichen Aufgabe wieder wie der „Ochs vorm Berg“.

Nimm deine Schulungsunterlagen zur Hand und versuche dich selbst an einer Lösung die kannste dann posten oder wenn du auf bestimmte Fragen beim Lösen stößt kann dir auch geholfen werden aber so mal Aufgaben hier abzuladen und zu hoffen das macht schon wer wird wohl nichts werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...