Abfragen gestalten... HILFE

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

laxibe
Beiträge: 7
Registriert: Sa, 03.11.2012 08:54

Abfragen gestalten... HILFE

Beitrag von laxibe »

Ich benutze seit einiger Zeit LibreOffice 3.6 Base für meinen Schul-Informatikkurs.
Tabellen wie folgt:

Schüler: SchülerID(Primärschlüssel), Name, Vorname
Kurse: KursID(Primärschlüssel), Kursname, LehrerID
Lehrer: LehrerID(Primärschlüssel), Anrede, Lehrername
besucht: SchülerID(Primärschlüssel), KursID(Primärschlüssel), Verspätungen, Fehlzeiten, Punkte.

Gleichlautende Felder sind verknüpft in 1:1 Beziehungen, außerdem noch je ein Kurs mit x Schüler (1 Schüler zu 1 Kurs), ein Lehrer zu einem Kurs.
Ich möchte jetzt eine Abfrage erstellen, in der jeweils ein Schüler mit dem jeweiligen Kurs mit jeweiligen Fehlzeiten, Verspätungen und Noten zu sehen ist.
Jedes Mal, wenn ich es versuche, hat entweder jeder Schüler 15 Punkte, 2 Fehlzeiten und 1 Verspätung, oder alles wird allem zugeordnet und Schüler sind gefühlte 1000-Mal zu sehen. :( Von meinen Klassenkameraden hat jeder dasselbe Problem, dabei sollen wir bis Donnerstag einen Bericht auf Basis dieser Abfrage erstellen.
Helft mir bitte!! :?
LG laxibe
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Abfragen gestalten... HILFE

Beitrag von juetho »

Hallo,
laxibe hat geschrieben:... außerdem noch je ein Kurs mit x Schüler (1 Schüler zu 1 Kurs), ein Lehrer zu einem Kurs.
Diesen Teilsatz verstehe ich überhaupt nicht. Ist das eine weitere Tabelle, oder bezieht sich das auf einen ForeignKey?
Ich möchte jetzt eine Abfrage erstellen, in der jeweils ein Schüler mit dem jeweiligen Kurs mit jeweiligen Fehlzeiten, Verspätungen und Noten zu sehen ist.
Offensichtlich hast du schon etwas probiert. Dann schreibe doch deinen Versuch hin (bitte als Code formatieren); dann können wir Schreib- und Denkfehler leichter nachvollziehen.
oder alles wird allem zugeordnet und Schüler sind gefühlte 1000-Mal zu sehen.
Das deutet auf das Kreuzprodukt hin und wird üblicherweise durch eine falsche oder fehlende WHERE-Klausel hervorgerufen.

Der Vollständigkeit halber:
  • Benutzt ihr die eingebettete HSQLDB oder eine eigenständige Datenbank (z.B. MySQL)? Je nachdem kann sich die SQL-Syntax unterscheiden.
  • Arbeitet ihr mit JOIN? (Das macht Abfragen übersichtlicher, kommt aber erst etwas später. Siehe dazu eine Einführung in SQL.)
Gruß Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
laxibe
Beiträge: 7
Registriert: Sa, 03.11.2012 08:54

Re: Abfragen gestalten... HILFE

Beitrag von laxibe »

jeder Schüler hat einen Kurs und jeder Kurs n Schüler ----> 1:n Beziehung
jeder Lehrer unterrichtet n Kurse, und jeder Kurs hat einen Lehrer ---> 1:n Beziehung.
Wir arbeiten nicht mit der SQL-Ansicht, das kommt später im Schuljahr.
Abfrage unter Verwendung eines Assistenten erstellen
-> Schüler.Name Schüler.Vorname Kurs.Kursname besucht.Verspätung besucht.Fehlzeiten besucht.Punkte
sind die ausgewählten Felder. Habs auch schon unter Einbeziehung der Primärschlüssel versucht.
Unter WHERE-Klausel kann ich mir etwas vorstellen, aber wo kann ich die finden/erstellen??
Der Vollständigkeit halber:
  • Benutzt ihr die eingebettete HSQLDB oder eine eigenständige Datenbank (z.B. MySQL)? Je nachdem kann sich die SQL-Syntax unterscheiden.
  • Arbeitet ihr mit JOIN? (Das macht Abfragen übersichtlicher, kommt aber erst etwas später. Siehe dazu eine Einführung in SQL.)
Ich habe keine Ahnung wovon du sprichst. Ich bin ein vollkommener Computer-Programmier/Datenbank/IT-Laie.
LG laxibe
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Abfragen gestalten... HILFE

Beitrag von juetho »

laxibe hat geschrieben:jeder Schüler hat einen Kurs und jeder Kurs n Schüler ----> 1:n Beziehung
jeder Lehrer unterrichtet n Kurse, und jeder Kurs hat einen Lehrer ---> 1:n Beziehung.
Aha, das sind also die Fremdschlüssel-Beziehungen (ForeignKey). Jetzt müsste ich nur wissen, wie die im Assistenten angezeigt werden. (Aber das brauchst du mir nicht zu erklären; wenn das nötig ist, finde ich es im Base-Handbuch.)
Wir arbeiten nicht mit der SQL-Ansicht, das kommt später im Schuljahr.
Abfrage unter Verwendung eines Assistenten erstellen
Ach je. Das mag zwar für Einsteiger und bloße Anwender hilfreich sein, trägt aber so gut wie nichts zum Verständnis bei. IMHO ist es also gerade zum Lernen ziemlich ungeeignet. (Aber wer weiß, welche Lernziele in eurem Lehrplan oder von der Schule und dem Lehrer angestrebt werden; also brauchen wir darüber nicht zu diskutieren, sondern müssen es hinnehmen.)
Unter WHERE-Klausel kann ich mir etwas vorstellen, aber wo kann ich die finden/erstellen??
Auf der Base-Hauptseite Abfragen wählen, dann die betreffende Abfrage anklicken und mit dem Menü-Befehl Bearbeiten oder mit Rechtsklick "in SQL-Ansicht bearbeiten". Dann sinnvoll formatieren (das macht der Assistent leider nicht):
  • hinter jedem Komma eine neue Zeile beginnen
  • vor FROM, WHERE, ORDER BY ebenfalls eine neue Zeile beginnen
  • jede Zeile mit den ausgewählten Spalten einrücken, sodass sie untereinander beginnen und die Begriffe FROM, WHERE, ORDER BY sofort zu sehen sind
Dann den gesamten Quelltext hierher kopieren und einfügen sowie als Code kennzeichnen (zuerst markieren, dann den obigen Button drücken). Dann sehen wir alle (du und Helfer) den SQL-Befehl einschließlich Verknüpfung der Tabellen.
laxibe hat geschrieben:
juetho hat geschrieben:Der Vollständigkeit halber:
  • Benutzt ihr die eingebettete HSQLDB ...
  • Arbeitet ihr mit JOIN? ...
Ich habe keine Ahnung wovon du sprichst. Ich bin ein vollkommener Computer-Programmier/Datenbank/IT-Laie.
LG laxibe
Nach dem, was du hier erklärst, können wir davon ausgehen, dass es sich um eine HSQL-DB handelt, und werden das bei den SQL-Befehlen beachten. Auch JOIN sollten wir besser nicht verwenden.

Ich habe jetzt testweise eine Abfrage mit dem Assistenten erstellt. Es scheint so, dass dort keine Eingabe möglich ist dafür, wie die Verknüpfung zwischen den Tabellen lauten soll. Das geht über die Entwurfsansicht (oder die SQL-Ansicht). Meine erste Vermutung scheint sich zu bestätigen: Es fehlen WHERE-Bedingungen, wie die gewünschten Datensätze zu verknüpfen sind. Aber auf konkrete Lösungshinweise warte ich erst einmal, bis ich hier deine Versuche sehe. Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
laxibe
Beiträge: 7
Registriert: Sa, 03.11.2012 08:54

Re: Abfragen gestalten... HILFE

Beitrag von laxibe »

Jetzt habe ich das hier eingegeben und wollte speichern:

Code: Alles auswählen

SELECT "besucht"."Verspätungen" AS "Verspätungen",  
"besucht"."Fehlzeiten" AS "Fehlzeiten", 
"besucht"."Punkte" AS "Punkte", 
"Schüler"."Name" AS "Name", 
"Schüler"."Vorname" AS "Vorname",
FROM "Schüler",
"besucht"
Plötzlich bekam ich den Fehler:
Syntax error in SQL expression
Was ist den nun los?!
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfragen gestalten... HILFE

Beitrag von RobertG »

Hallo laxibe
laxibe hat geschrieben: besucht: SchülerID(Primärschlüssel), KursID(Primärschlüssel), Verspätungen, Fehlzeiten, Punkte.
Ich möchte jetzt eine Abfrage erstellen, in der jeweils ein Schüler mit dem jeweiligen Kurs mit jeweiligen Fehlzeiten, Verspätungen und Noten zu sehen ist.
Du brauchst doch nur diese eine Tabelle. Die anderen geben doch nur die Informationen über die Namen usw. ab. Und wenn ich die Tabelle richtig betrachte, dann erfordert das doch eigentlich erst einmal keine Abfrage, denn die Tabelle "besucht" hat ja einen doppelten Primärschlüssel, bestehend aus SchülerID und KursID. Es darf also gar kein doppelter Datensatz (gleicher Schüler und Kurs) vorkommen. Also müssen die Fehlzeiten schon aufaddiert sein, ebenso die Verspätungen. Die Punkte stehen auch im gleichen Datensatz.
Wenn Du jetzt noch den Namen des Schülers sichtbar machen möchtest, dann musst Du nur die Tabelle "Schüler" und die Tabelle "besucht" gleichzeitig in die Abfrage laden - die ihr ja noch mit der grafischen Benutzeroberfläche erstellt.
Diese Abfrage sieht direkt vor, dass eine Verbindung der Tabelle aus den Beziehungen der Tabellen gelesen wird. Ist diese Verbindung nicht da, so musst Du sie mit der Maus in der grafischen Abfrage erstellen. Gleichlautende Felder sind dort also zu verbinden.
Ohne diese Beziehung zwischen den Tabellen (die eigentlich direkt nach der Erstellung der Tabellen gemacht wird) wird jeder Datensatz der einen Tabelle mit jedem Datensatz der anderen verbunden, macht z.B. bei je 5 Datensätze in 2 Tabellen 25 mögliche Ergebnisse ...

Lade doch einfach einmal den Rohentwurf Deiner Datenbank hoch - dann können wir Stückchen für Stückchen klären, wo die Probleme begraben sind.

Gruß

Robert
laxibe
Beiträge: 7
Registriert: Sa, 03.11.2012 08:54

Re: Abfragen gestalten... HILFE

Beitrag von laxibe »

Hallo Robert
Danke erstmal für deine Antwort, aber genau da liegt ja das Problem: In Bericht bzw. Abfrage wird SchülerID oder KursID nur als Zahl und nicht als entsprechend anderes Feld angezeigt!
Wie lad ich das denn nun hier hoch?
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfragen gestalten... HILFE

Beitrag von RobertG »

Hallo laxibe,
laxibe hat geschrieben:

Code: Alles auswählen

SELECT "besucht"."Verspätungen" AS "Verspätungen",  
"besucht"."Fehlzeiten" AS "Fehlzeiten", 
"besucht"."Punkte" AS "Punkte", 
"Schüler"."Name" AS "Name", 
"Schüler"."Vorname" AS "Vorname",
FROM "Schüler",
"besucht"
Plötzlich bekam ich den Fehler:
Syntax error in SQL expression
Was ist den nun los?!
Der Fehler liegt in dem Komma vor der Nennung der Tabellen.
Der zweite, von mir bereits vermutete Fehler liegt darin, dass die Tabellen so in keiner Beziehung zueinander stehen.

Code: Alles auswählen

SELECT "besucht"."Verspätungen",  
"besucht"."Fehlzeiten", 
"besucht"."Punkte", 
"Schüler"."Name", 
"Schüler"."Vorname"
FROM "Schüler",
"besucht"
WHERE "Schüler"."SchülerID" = "besucht"."SchülerID"
Die ganzen Aliasbezeichnungen mit "AS" kannst Du übrigens weglassen, wenn Du keine gleichlautenden Felder hast und die Felder nicht umbenennen willst.
Kleiner Hinweis Zur Grundlage

Code: Alles auswählen

SELECT "Feldbezeichnung" FROM "Tabelle"
... einfachste Form

Code: Alles auswählen

SELECT "Tabelle1"."Feld1", "Tabelle2"."Feld2" FROM "Tabelle1", "Tabelle2" WHERE "Tabelle1"."ID" = "Tabelle2"."FremdID"
... Grundform, wenn 2 Tabellen miteinander verknüpft werden - sonst werden alle Datensätze aus Tabelle 1 mit allen Datensätzen aus Tabelle 2 kombiniert.

Gruß

Robert
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfragen gestalten... HILFE

Beitrag von RobertG »

Hallo laxibe,

Die Schülerbezeichnungen und Kurse bekommst Du jetzt sicher auch noch in die Sache rein, wenn Du weiter dran bleibst:

Code: Alles auswählen

SELECT "besucht"."Verspätungen", 
"besucht"."Fehlzeiten",
"besucht"."Punkte",
"Schüler"."Name",
"Schüler"."Vorname",
"Kurse"."Kursname"
FROM "Schüler", "besucht", "Kurse"
WHERE "Schüler"."SchülerID" = "besucht"."SchülerID"
AND "Kurse"."KursID" = "besucht"."KursID"
Damit kannst Du dann den Bericht füttern.

Gruß

Robert
laxibe
Beiträge: 7
Registriert: Sa, 03.11.2012 08:54

Re: Abfragen gestalten... HILFE

Beitrag von laxibe »

Code: Alles auswählen

SELECT "besucht"."Verspätungen", 
"besucht"."SchülerID",
"besucht"."KursID"
"besucht"."Fehlzeiten", 
"besucht"."Punkte",
"Schüler"."SchülerID"
"Schüler"."Name", 
"Schüler"."Vorname",
"Kurs"."KursID",
"Kurs"."Kursname"
FROM "Schüler",
"besucht"
WHERE "besucht"."SchülerID" = "Schüler"."SchülerID"
"besucht"."KursID" = "Kurs"."KursID"
Bereits beschriebener Fehler.
Anhang kommt gleich.
laxibe
Beiträge: 7
Registriert: Sa, 03.11.2012 08:54

Re: Abfragen gestalten... HILFE

Beitrag von laxibe »

Anhang = Datenbank in roh
Dateianhänge
Info wichtig..odb
(7.7 KiB) 60-mal heruntergeladen
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfragen gestalten... HILFE

Beitrag von RobertG »

Hallo laxibe,
laxibe hat geschrieben:

Code: Alles auswählen

SELECT "besucht"."Verspätungen", 
"besucht"."SchülerID",
"besucht"."KursID"
"besucht"."Fehlzeiten", 
"besucht"."Punkte",
"Schüler"."SchülerID"
"Schüler"."Name", 
"Schüler"."Vorname",
"Kurs"."KursID",
"Kurs"."Kursname"
FROM "Schüler",
"besucht"
WHERE "besucht"."SchülerID" = "Schüler"."SchülerID"
"besucht"."KursID" = "Kurs"."KursID"
Bereits beschriebener Fehler.
Anhang kommt gleich.
Die Tabelle "Kurs" ist nicht nach FROM aufgeführt.

Was mir auffällt: Die Beziehungen sind richtig unter Extras → Beziehungen definiert. Die Beziehungen werden beim Abfrageeditor auch eindeutig angezeigt. Wie erstellst Du die Abfrage eigentlich? Versuchst Du etwas mit dem Assistenten zusammen zu bauen oder gehst Du über "Abfrage in der Entwurfsansicht erstellen"?

Gruß

Robert
Dateianhänge
Info wichtig..odb
Einfach nur zusammengeklickt ...
(7.89 KiB) 61-mal heruntergeladen
Zuletzt geändert von RobertG am Sa, 03.11.2012 17:29, insgesamt 1-mal geändert.
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Abfragen gestalten... HILFE

Beitrag von juetho »

Außerdem lautet eine Regel: Mehrere Spalten, die ausgegeben werden sollen, müssen mit Komma verknüpft werden; nach der letzten Spalte vor FROM muss das Komma entfallen. In einem früheren Versuch stand direkt vor FROM ein Komma (darauf hatte Robert hingewiesen). Jetzt fehlen hinter zwei Spalten die Kommata.

Tipp zur Lektüre: Das Base-Handbuch zeigt ab Seite 136, wie Abfragen erstellt werden können. Die SQL-Einführung nennt die Grundstruktur eines SELECT-Befehls. (Auf die Gänsefüßchen könntest du auch verzichten; das wäre übersichtlicher. Das geht allerdings nur bei einfachen Feld- und Tabellennamen.)
Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
laxibe
Beiträge: 7
Registriert: Sa, 03.11.2012 08:54

Re: Abfragen gestalten... HILFE

Beitrag von laxibe »

Hallo Robert,
DANKE!!
Genauso war es gedacht :)
Hmm ich habs über den Assistenten versucht...
Jetzt Sag mir noch mal wie genau du das gemacht hast? Das wäre super!
LG laxibe

PS: @Jürgen ich habe mir grade "SQL für Dummies" bei Amazon bestellt. Vielleicht werde ich ja daraus schlauer.
RobertG
********
Beiträge: 2069
Registriert: Fr, 13.04.2012 19:28
Kontaktdaten:

Re: Abfragen gestalten... HILFE

Beitrag von RobertG »

Hallo laxibe,
laxibe hat geschrieben: Hmm ich habs über den Assistenten versucht...
Jetzt Sag mir noch mal wie genau du das gemacht hast? Das wäre super!
Mit den Assistenten arbeite ich (mit Ausnahme des Assistenten für Formulare) auch mit SchülerInnen überhaupt nicht - ich bin Lehrer und erstelle u.a. mit SchülerInnen im 8. Jahrgang Datenbanken.
Mein Normalweg:
Abfragen → Abfrage in der Entwurfsansicht erstellen
Tabellen auswählen (erscheinen verknüpft in der oben zu sehenden Tabellenübersicht)
Im unteren Teil der Entwurfsansicht die Felder auswählen
... danach war die Abfrage fertig.
Das ganze habe ich entsprechend auch im Base-Handbuch beschrieben, auf das Jürgen hingewiesen hat. Lade es Dir einfach runter, da sind auch die entsprechenden Abbildungen dabei. Du kannst auch einzelne Kapitel herunterladen sowie Beispieldatenbanken: http://de.libreoffice.org/hilfe-kontakt/handbuecher/ - dort etwas nach unten scrollen.
Ich werde jetzt natürlich noch einmal die Assistenten durchprobieren. Wenn da direkt so merkwürdige Abfragen zustande kommen, dann sind die Dinger für mehr als eine Tabelle gar nicht brauchbar. Ich melde mich danach noch einmal.

Gruß

Robert
Antworten