Abfragen über Query By Example (QBE)...

Wie in der vorhergehenden Lektion erwähnt, bietet dir das DBMS einschlägiger Office-Anwendungen neben SQL auch eine Oberfläche, in der du deine Abfragen einfach "zusammenklicken" kannst. Dies befreit dich zwar von vermeintlich lästiger Denk- und Schreibarbeit - vor allem bei Abfragen, die mehrere Tabellen betreffen - birgt aber auch ein paar Tücken in sich. Auch hier solltest du dir einen gewissen Algorithmus (Schrittfolge) zu eigen machen.

Empfohlene Schrittfolge...

Wir wählen in unserem DBMS die Abfragen aus und starten mit "Abfrage in der Entwurfsansicht erstellen...":
Jetzt fügen wir die Tabellen hinzu, die von unserer Abfrage betroffen sind.

ABER bitte(!) auch wirklich nur diese Tabellen und nicht einfach alle verfügbaren!!! Das DBMS wird nämlich alle Tabellen (im Extremfall über ein karthesisches Produkt) miteinander verknüpfen, egal, ob dies unsere Abfrage erfordert oder nicht.

Das hat zumindest bei komplexeren Datenbanken zur Folge, dass der Rechenaufwand für den Prozessor überproportional ansteigt und die SQL-Syntax, in die unsere Abfrage umgewandelt wird, erschreckende Ausmaße annimmt. (Der Interpreter scheint nämlich auch keine JOIN-Klausel zu kennen.)
  1. Tabellenname auswählen (Drop-Down-Menü)...
  2. Feldnamen, die von der Abfrage betroffen sind, auswählen - auch die Felder, die wir für die Bedingung (hier: Kriterium) benötigen (ebenfalls Drop-Down-Menü)...
  3. Kriterium (Bedingung) festlegen...
  4. Felder deaktivieren, die in der Ergebnistabelle nicht erscheinen sollen...
  1. Abfrage ausführen...
Wenn wir bei der Abfrage keine Fehler gemacht haben, wird uns nun die Ergebnistabelle angezeigt. Ansonsten erscheint eine Fehlermeldung, deren Interpretation schon ein gerüttelt Maß an SQL-Kenntnissen erfordert.

Wie du unschwer erkennen kannst, wollten wir uns mit dieser Abfrage alle Lieder von Max Mustermann anzeigen lassen.
  1. Abfragefenster schließen und speichern...

Weiter gehts mit Beispielabfragen...

qbe_abfrage_1

Alle Liedtitel mit zugehörigen CD-Nummern, deren Liedsprache norwegisch oder schwedisch ist.

qbe_abfrage_2

Alle englischsprachigen Liedtitel, die sich auf CD 1, 2 oder 6 befinden.

Und da haben wir schon eine solche Stolperfalle! Wenn du bei einem Feld mehrere Kriterien mit ODER verknüpfst UND bei einem weiteren Feld ein Kriterium forderst, muss dieses Kriterium "nach unten ausgefüllt" werden. Du würdest sonst als Ergebnis alle englischsprachigen Lieder von CD 1 und alle(!) Lieder von CD 2 und CD 6 erhalten, egal welche Liedsprache sie haben. (Das liegt meines Erachtens an der Eigenart des Interpreters, der die Abfrage bei der Ausführung intern in eine SQL-Anweisung übersetzt. Offensichtlich setzt er dann die Klammern nicht wie eigentlich gewünscht.)

qbe_abfrage_3

Alle Liedtitel mit den zugehörigen CD-Titeln, die der Interpret mit der Interpreten-ID 10 (Joe Knocker) singt.

Wie du siehst kann man auch problemlos mehrere Tabellen abfragen, wenn man sie vorher korrekt hinzufügt.

qbe_abfrage_4

Die Anzahl aller deutschsprachigen Liedtitel.

Ja, was ist das denn???

  1. Ich habe mir für die Spaltenüberschrift einen aussagekräftigeren Feldnamen ausgedacht und ihn unter Alias eingetragen. Dadurch wird der standardmäßig verwendete Feldname durch meine "Eigenkreation" ersetzt.
  2. Ich habe in meiner Abfrage eine sogenannte Aggregatfunktion (Anzahl) verwendet, welche die Datensätze des ausgewählten Feldes zählt. Es gibt noch weitere dieser Funktionen, zB. Durchschnitt, Maximum, Minimum,....
  3. Achtung Stolperfalle! Wenn man auf ein Feld gleichzeitig eine Funktion und ein Kriterium anwendet, erhält man oft eine Fehlermeldung. Das ist auch für mich nicht nachvollziehbar, da es im SQL-Standard problemlos möglich ist.

    Man muss sich also mit obigem "Trick" behelfen, der eigenartigerweise auch eine korrekte SQL-Anweisung erzeugt.

Noch mehr Stolperfallen...

OpenOffice hat so seine Probleme beim Zugriff auf Werte vom Datentyp DATE und TIME, deswegen habe ich auch vorsorglich auf ihre Verwendung verzichtet.

Um einen Wert vom Datentyp BOOLEAN (true / false) abzufragen, verwendet OpenOffice in der QBE für das Kriterium eine ganz abenteuerliche Syntax, die bestimmt schon Heerscharen von Anwendern in den Nervenzusammenbruch getrieben hat:

=-1 entspricht: true, wahr, 1, ja
<>-1 entspricht: false, falsch, 0, nein

Mengenoperation, bei der jeder Datensatz der einen Tabelle mit jedem Datensatz der anderen Tabelle kombiniert wird. Dies liefert meist keine sinnvollen Ergebnisse.