matten82
Goto Top

Abfrage mehrerer Tabellen mittels SQL-Query

Habe in der Berufsschule folgende Aufgabe bekommen. Googeln gab da nichts her und mich l�uft langsam die Zeit weg, aber vll hat ja jemand Lust mir ein wenig zu helfen.

Die Datenbankstruktur:


Die Aufgabe:

1. Lassen Sie sich alle Artikel mit der Artikelnummer, Bezeichnung und Lieferer für die Warengruppe Computer anzeigen [15 DS].

Der Link zur kompletten Aufgabe:

http://www.hafenklause.de/sql_uebung.zip

W�re Nett wenn jemand den SQL-Query f�r Aufgabe 1. mal hier posten und kurz erkl�ren k�nnte.
Ich kriege es momentan leider nur hin, dass ich die Artikelnummer und die Bezeichnung ausgegeben bekomme. An den Lieferer komme ich momentan nicht ran, da ich nicht wei�� wie ich die Abfrage �ber mehr als 2 Tabellen machen soll.


Dann denke ich bekomme ich die anderen Aufgaben auch hin. Wenn jemand alle 5 Aufgaben l�sen m�chte, hab ich da nat�rlich auch nichts gegen einzuwenden, sofern da eine kurze Erl�uterung bei ist. ;)

Sch�nen Gru�

Content-ID: 18805

Url: https://administrator.de/contentid/18805

Ausgedruckt am: 26.11.2024 um 22:11 Uhr

Angelkiller
Angelkiller 01.11.2005 um 20:50:44 Uhr
Goto Top
Also deine Hausaufgaben werden wir dir sicherlich nicht machen, da mussten wir schließlich auch alle mal durch . Poste doch mal die Abfrage wie du Sie momentan hast, dann kann man mal ans korrigieren gehen .

Viele Grüße
Angelkiller
16640
16640 02.11.2005 um 08:11:15 Uhr
Goto Top
Moin,

ich versteh' Dein Problem nicht. Du hast eine Accessdatenbank, die Dir bis auf die Einschränkung auf die Warengruppe sowieso schon alles automatisch hinbaut. Was genau ist Dein Problem?

Zum grundsätzlichen Verständnis solltest Du mal nach dem Begriff JOIN und seinen Ausführungen (LEFT JOIN, INNER JOIN, RIGHT JOIN, LEFT OUTER JOIN, ...) googlen. Das dient dann wirklich dem Verständnis.

Gruß
dba
Biber
Biber 02.11.2005 um 20:20:13 Uhr
Goto Top
@16640
Hmmm, lass uns fair bleiben:
Du hast eine Accessdatenbank, die Dir bis auf die Einschränkung auf die Warengruppe
sowieso schon alles automatisch hinbaut.
Was genau ist Dein Problem?
Das Problem ist möglicherweise, dass nicht jeder Berufsschüler an seinem Heim-Computer ein MS-Access installiert hat. Denn das ist zwar nur ?9.95 wert, kostet aber im Laden mehr.
Und zusätzlich soll es sogar Berufsschüler geben, die nicht einmal einen Rechner ihr Eigen nennen.

Wenn ich mal gutwillig unterstelle, dass matten82 eben nicht mal kurz den Klicki-Bunti-Assistenten im Access anschmeißen kann oder per Trial'N'Error mal zwei Stündchen ein paar SQL-Statements eintippseln und deren Wirkung interpretieren kann... wenn er also nur das Aufgabenblatt auf Papier vorliegen hat und sich zweimal täglich ins Internetcafe begibt, um sich diesen Thread anzugucken... dann können wir doch ein bisschen helfen tun... ist doch bald Weihnachten... face-wink

@matten82
Aber wie Angelkiller schon geschrieben hat... wir helfen gern, wenn es irgendwo klemmt.
Und Admins sind schon gewohnt, den ganzen Tag den Schutt anderer Leute wegzuschaufeln. Aber Deine Hausaufgaben machen wir nicht.

Back To Thread.

Die Tabellen in der Datenbank "Beschaffung" sind ja halbwegs normalisiert und über einige Schlüsselfelder, die in zwei oder mehr Tabellen vorkommen, miteinander verknüpft.

So z.B.
- die Tabelle "Artikel" mit der Tabelle "Warengruppe" .......über das Feld "Warengruppenschlüssel",
- die Tabelle "Artikel" mit der Tabelle "Artikel_Lieferer"..... über das Feld "Artikelnummer",
usw.
wobei es mal n:1-Beziehungen, mal 1:n-Beziehungen sind....
Eine Artikelnummer kann nur zu genau einer Warengruppe gehören, aber zu einer Warengruppe können n Artikel gehören.
Eine Artikelnummer kann von mehreren Lieferanten bezogen werden, ein Lieferant kann mehrere Artikel liefern, aber ein Lieferant kann nur in einer Straße in einem Ort wohnen.

Wenn die Tabelleninhalte "sauber" wären (weil es zum Beispiel über Prüfungen des Erfassungsprogramms und/oder über Datenbankrestriktionen gewährleistet wird), ließen sich die Fälle "es gibt aber Artikel, die keiner Warengruppe zugeordnet sind" und "es gibt Artikel in der Artikel-Tabelle, für die kein Lieferant existiert" ausschließen.

In den Aufgaben sind nur diese "sauberen" Datensätze gefragt. In diesem Fall kannst Du alle Beziehungen in SQL über INNER JOINs abbilden.
Ein select * from artikel INNER JOIN artikel_lieferer ON artikel.artikelnummer = artikel_lieferer.artikelnummer
würde Dir alle Felder der "Artikel"-Tabelle liefern mit den 5 Feldern der Artikel_Lieferer zusätzlich, verknüpft über das Feld "Artikelnummer, das in beiden Tabellen vorkommt.
Hier würde herauskommen (bei 69 Artikelnummern in der Artikel-Tabelle) --> 76 Datensätze. Da ja z.B. "Tischleuchten" und "Monitor-Schwenkarme" bei mehreren Lieferanten bestellbar sind.
Ein select * from artikel LEFT JOIN artikel_lieferer ON artikel.artikelnummer = artikel_lieferer.artikelnummer
würde Dir sogar einen Satz mehr liefern, nämlich auch diesen "kaputten" Satz aus der Artikeltabelle, den es bei gar keinem Lieferanten gibt.
LEFT JOIN hieße also (als Eselbrücke) in etwa: Alle Sätze aus der LINKEN Tabelle, egal ob in der RECHTEN Tabelle vorhanden.
Links und rechts natürlich auf das SQL-Statement bezogen, nicht auf die Anordnung im Bildchen oben.
INNER JOIN ebenso platt zu merken: alle Datensätze, die INNER linken und INNER rechten Tabelle vorhanden sind.

Dann wäre eine von mehreren richtigen Lösungen für die Aufwärm-Aufgabe 1 also:
SELECT artikel.artikelnummer,
       artikel.artikelbezeichnung,
       <s>artikel.warengruppenschlüssel, </s> ...nicht gefordert
       <s>artikel_lieferer.lieferernummer, </s> ...nicht gefordert
       lieferer.firmenname
FROM lieferer INNER JOIN (warengruppe 
  INNER JOIN 
  (artikel 
    INNER JOIN artikel_lieferer ON artikel.artikelnummer = artikel_lieferer.artikelnummer) 
      ON warengruppe.[verbindendesFeld2]= artikel.[verbindendesFeld2]) 
        ON lieferer.[verbindendesFeld3]= artikel_lieferer.[verbindendesFeld3]
WHERE (((warengruppe.warengruppenbezeichnung) = 'was-auch-immer'));  

... wobei Access-SQL bei 'was-auch-immer' die doppelten Anführungszeichen auch tolerieren würde ("was-auch-immer"). Kleine Nettigkeit von Bills Bande.

Zur eventuellen Korrektur der nächsten Aufgaben stehen wir gerne zur Verfügung.

Und ich gehe fest davon aus, dass Du vor dem 1. Advent hier Dein erstes kleines SQL-Tutorial gepostet hast. face-wink

HTH Biber

P.S. Ich hoffe, ihr wisst, dass sich Euer Berufsschullehrer eine Menge Mühe damit gemacht hat, ein realitätsnähes Beispiel für Euch zusammenzutragen. Steckt IMHO wesentlich mehr Arbeit drin, als er machen müsste. Ein kleiner leckerer Baumkuchen von Feinkost-Albrecht als Dank an ihn wäre das Mindeste, was ihr ihm spendieren solltet.
16640
16640 03.11.2005 um 07:32:46 Uhr
Goto Top
Hallo Biber,

@16640
Hmmm, lass uns fair bleiben:

Du hast Recht. Ich war davon ausgegangen, weil in dem Beispiel, dass er zum Herunterladen bereitgestellt hat, diese Access-DB enthalten war. Aber kann ja sein, dass er selbst gar keine Möglichkeit zum Bearbeiten hat.

Und ansonsten ist Deinen Ausführungen nix hinzuzufügen

Schönen Donnerstag und Gruß
dba
matten82
matten82 07.11.2005 um 10:46:47 Uhr
Goto Top
Danke für die Hilfe.

Zum besseren Verständnis warum ich hier meine Hausaufgaben poste.
Haben seit ca. 1/2 Jahr keinen EDV-Ausbildungsleiter mehr und sind bei uns in der Firma jetzt nur noch 2 Azubis, die den Laden schmeißen müssen. Deshalb auch keine Möglichkeit irgendjemand mal zu fragen, wenn wie hier ein Problem auftritt. Das Problem war hier halt die Unkenntnis des Join-Befehls. Und wenn man nich genau weiß wonach man suchen soll, hilft einem Google meist auch nicht so viel weiter. Und ich habe seit einem 1/2 Jahr sehr viel Erfahrung mit Google gemacht ;).

PS.: Hast Recht der Lehrer gehört echt noch zu den Motivierten. Mal schaun, ob sich da was machen lässt mit der Klasse.
Biber
Biber 07.11.2005 um 11:17:06 Uhr
Goto Top
Dir auch Danke, matten82,
für die Antwort und die Hintergrundinfo.
Wie schon oben geschrieben: wenn es um Verständnisprobleme geht, finden sich hier mit Sicherheit viele Hilfswillige. Also scheue Dich nicht, Dich wieder zu melden, wenn Du irgendwo stecken bleibst. Angebot steht nach wie vor.

Schönen Montag
Biber
Angelkiller
Angelkiller 07.11.2005 um 12:45:18 Uhr
Goto Top
Das mit den Hausaufgaben machen war ja auch nur ein Scherz, man darf net alles so eng sehen face-smile

Wie schon Biber gesagt hat, wenn was ist fragen !!

Gruß
Timo