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�
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�
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 18805
Url: https://administrator.de/contentid/18805
Ausgedruckt am: 26.11.2024 um 22:11 Uhr
7 Kommentare
Neuester Kommentar
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
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
@16640
Hmmm, lass uns fair bleiben:
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...
@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:
... 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.
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.
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?
sowieso schon alles automatisch hinbaut.
Was genau ist Dein Problem?
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...
@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.
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.
Hallo Biber,
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
@16640
Hmmm, lass uns fair bleiben:
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
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
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