SQL

Dr Franke Ghostwriter
Wer erklärt hier kurz die Problematik der SQL und auf was es ankommt? Die Lösungen habe ich. Ich bräuchte nur eine Hilfestellung, wie ich da vorgehe und worauf ich achten muss. Vielen Dank! 🙂

Beispiel:
1. Die Mitarbeiterin Anna Oberschelp aus Unna, PersonalNr 289, soll mit diesen Daten in der dafür geeigneten Relation erfasst werden.

Antwort:
INSERT INTO Person
VALUES (289, 'Anna', 'Oberschelp', 'Unna');

Semantisch richtig oder falsch?
______________________________________________________________

2. Auszugeben sind alle Einlagerungsvorgänge mit Datum, Artikelnummer, Artikelbezeichnung und Wert (Preis * Anzahl), für die der Wert 1000 überschritten wird.

SELECT Einlagerung.Einlagerungsdatum,
Einlagerung.ArtikelNr,
Artikel.ArtikelBez,
Artikel.Preis*Einlagerung.Anzahl AS Wert
FROM Artikel, Lager, Einlagerung
WHERE Artikel.ArtikelNr=Einlagerung.ArtikelNr
AND Lager.LagerNr=Einlagerung.LagerNr
AND (Artikel.Preis*Einlagerung.Anzahl) > 1000;

Semantisch richtig oder falsch?
______________________________________________________________

3. Alle Einlagerungsvorgänge mit Datum vor dem 01.01.2007 sollen gelöscht werden.

DELETE
FROM Einlagerung
WHERE ((Einlagerung.Einlagerungsdatum) < (2007-01-01));

Hinweis: Die Kodierung des Datums in der Form JJJJ-MM-TT ist zulässig und sei als solche vereinbart.

Semantisch richtig oder falsch?
______________________________________________________________
 
Ok dann versuche ich mal mein Glück 🙂

Das erste was wichtig ist sind die Tabellen. Es müssen immer alle Tabellen aufgelistet sein auf die man selektiert oder sonst was macht.

Bei einem Insert ist es wichtig zu wissen in welcher reihenfolge die datenbankattribute angelegt sind, sonst kann es zu fehlern kommen.

Bei einem Delete sollte man auf jeden fall die bedingung näher analisieren, da sonst zu viele oder zu wenig Daten entfernt werden.

Beim Selektieren über mehrere Tabellen werden auch die Primärschlüssel und Fremdschlüssen in der Where-Bedingung miteinander verbunden. Da sollte man schauen ob alle Tabellen richtig verbunden sind.

Wenn Group By vorkommt muss man auch auf die bedingungen achten und auf die selektiere menge. Alle felder die mit keiner agregatfunktion bearbeitet werden müssen im group by auftauchen. Die Where-Bedingung bei Gruppierung bezieht sich immer auf die selektion der Daten die verarbeitet werden sollen. Wenn die Groupierte Menge eingeschränkt werden soll muss Having benutz werden.

Beantwortet das deine Frage?

Gruß
mark
 
1 ist falsch. Dafür mußt Du Dir das Datenmodell angucken, da ist auch die Reihenfolge der Spalten. Die richtige Reihenfolge ist PersoNr, Nachname, Vorname. Da geben Sie Dir PersoNr, Vorname, Nachname. Der Befehl wird zwar ausgeführt, aber der Vorname wird in der Nachname-Spalte stehen.

2 ich weiß nur, dass es tut's. Bei diesem Befehl habe ich nur nicht verstanden, warum sie mit dem Lager arbeiten... Für mich könnten man den rauslassen.

SELECT Einlagerung.Einlagerungsdatum,
Einlagerung.ArtikelNr,
Artikel.ArtikelBez, --> Es sind alle Angaben, die direkt aus der Tabelle gezogen werden und angezeigt werden müßen. Hier kannst Du höchstens checken, dass alle dabei sind, ob die Kombination Tabelle.Feld stimmt
Artikel.Preis*Einlagerung.Anzahl AS Wert --> Da die Wert so nicht in der Tabelle steht, muss man sagen, was man machen will (Artikel.Preis*Einlagerung.Anzahl) und unter welcher Bezeichnung es angezeigt werden soll (AS Wert)
FROM Artikel, Lager, Einlagerung --> Hier sind alle Tabellen, die für diese Ausgabe angesprochen werden
WHERE --> Hier fangen die Bedingungen an, die die Sortierung bestimmen.
Da die Tabellen nicht direkt miteinander verknüpft sind, mußt Du sagen, welches Feld der einen Tabelle dem Feld der anderen Tabelle entspricht. Der "gemeinsame Nenner" ist hier ArtikelNr.
Artikel.ArtikelNr=Einlagerung.ArtikelNr
AND Lager.LagerNr=Einlagerung.LagerNr--> Da wie gesagt, keine Ahnung, warum Lager dabei ist... Tut nichts zur Sache...

AND (Artikel.Preis*Einlagerung.Anzahl) > 1000--> wird durch die Aufgabestellung bestimmt

3 ist auch richtig, ich kann Dir nur keine Erklärung für geben... Das Feld ist das richtige, das Datum auch und die Syntax stimmt auch soweit ich weiß...

Ich weiß nicht, ob meine Erklärungsversuche wirklich hilfreich waren, und ob es das ist, was Du wissen wolltest....
 
Oben