Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

SQL Übungen, benötige Hilfe

Empfohlene Antworten

Veröffentlicht

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

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ß

Gut, dann will ich mal versuchen, zu antworten.

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

Ist bei Oracle. Trotzdem Danke für die restlichen Infos. Weitere Hilfen sind gerne weiter willkommen.

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.