Quellenübergreifende Abfragen

Dank Tabellennormalisierung können wir Daten effektiv speichern. Wie schon erwähnt, sind aber Daten in Tabellen oft nicht gut lesbar. Das lösen wir jetzt über eine Abfrage: Über Tabelle anzeigenTabelle anzeigen fügen wir unsere Tabellen tblOrte und tblLänder zu einer Abfrage hinzu.

Abfrage1
tblLänder 1 tblOrte
* *
IDLand IDOrt
txtLand txtOrt
lngLand

Wie man sieht, wird auch unsere Beziehung automatisch angezeigt. Im unteren Teil des Abfragefensters nehmen wir folgende Einstellung vor:

Feld: txtOrt txtLand
Tabelle: tblOrte tblLänder
Sortierung:    
Anzeigen:
Kriterien:    
oder:    
     
SELECT txtOrt, txtLand
FROM tblLänder INNER JOIN tblOrte
     ON tblLänder.IDLand = tblOrte.lngLand;
Abfrage1
txtOrt txtLand
München Bayern
Bamberg Bayern
Berlin Berlin
Stuttgart Baden-Württemberg
Bayreuth Bayern

Wir haben also Daten aus verschiedenen Tabellen verknüpft.

Nun haben wir in unserer Ortstabelle allerdings noch nicht alle real existierenden Orte eingegeben. Die Abfrage gibt uns nur diejenigen Datensätze aus, für die sowohl in der Länder- als auch der Ortstabelle Werte zu finden sind. Wenn wir auch Länder angezeigt bekommen wollen, für die noch gar keine Orte erfasst sind, müssen wir im oberen Teil des Entwurfsfensters per Doppelklick auf die Beziehung das Fenster Verknüpfungseigenschaften öffnen:

 Verknüpfungseigenschaften
Linker Tabellenname Rechter Tabellenname
Linker Spaltenname Rechter Spaltenname
1: Beinhaltet nur die Datensätze, bei denen die Inhalte der verknüpften Felder beider Tabellen gleich sind.
2: Beinhaltet ALLE Datensätze aus 'tblLänder' und nur die Datensätze aus 'tblOrte', bei denen die Inhalte der verknüpften Felder beider Tabellen gleich sind.
3: Beinhaltet ALLE Datensätze aus 'tblOrte' und nur die Datensätze aus 'tblLänder', bei denen die Inhalte der verknüpften Felder beider Tabellen gleich sind.

Wenn wir hier den zweiten Punkt „Beinhaltet ALLE Datensätze aus 'tblLänder' ...“ auswählen und das Fenster wieder schließen, wird die Beziehung im Entwurfsfenster mit einem Pfeil von links nach rechts hin zu tblOrte angezeigt.

Abfrage1
tblLänder 1 tblOrte
* *
IDLand IDOrt
txtLand txtOrt
lngLand

Die Abfrage zeigt nun auch Bundesländer an, für die noch gar kein Ort eingegeben wurde.

SELECT txtOrt, txtLand
FROM tblLänder LEFT JOIN tblOrte
     ON tblLänder.IDLand = tblOrte.lngLand;
Abfrage1
txtOrttxtLand
MünchenBayern
BambergBayern
BerlinBerlin
StuttgartBaden-Württemberg
BayreuthBayern
Brandenburg
Bremen
Hamburg
Hessen
Mecklenburg-Vorpommern
Niedersachsen
Nordrhein-Westfalen
Rheinland-Pfalz
Saarland
Sachsen
Sachsen-Anhalt
Schleswig-Holstein
Thüringen

Hätten wir im Verknüpfungsfenster den dritten Punkt „Beinhaltet ALLE Datensätze aus 'tblOrte' ...“ ausgewählt, würde der Pfeil im Entwurfsfenster von rechts nach links zeigen. Das wäre in unserem Beispiel sinnvoll, wenn wir auch Orte erfassen würden, die keinem Bundesland zugehören, also außerhalb Deutschlands liegen würden.

Falls wir einmal eine Abfrage erstellen wollen, bei der noch keine Beziehung vordefiniert ist, kann man im Entwurfsfenster auch eine Beziehung definieren, indem man die zu verknüpfenden Tabellenfelder aufeinander zieht - genau wie beim normalen Definieren von Beziehungen. Solche Beziehungen gelten immer nur für die jeweilige Abfrage. Und natürlich lassen sich Beziehungen auch ebenso löschen.