Dank der Tabellennormalisierung
können wir Daten effektiv speichern. Wie bereits erwähnt, sind solche Rohdaten
jedoch für Menschen nicht immer ohne weiteres verständlich. Dieses Problem
lösen wir mit Abfragen: Über
Tabellen hinzufügen
fügen wir einer Abfrage unsere Tabellen
tblOrte
und tblLänder
hinzu.
Abfrage1 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
Die Beziehung, die wir bereits im Beziehungsfenster erstellt hatten, wird hier automatisch angezeigt. Im unteren Teil des Abfragefensters nehmen wir nun folgende Einstellung vor:
SELECT txtOrt, txtLand FROM tblLänder INNER JOIN tblOrte ON tblLänder.IDLand = tblOrte.lngLand;
Feld: | txtOrt | txtLand |
Tabelle: | tblOrte | tblLänder |
Sortierung: | ||
Anzeigen: | ||
Kriterien: | ||
oder: | ||
Abfrage1 | |
---|---|
txtOrt | txtLand |
Stuttgart | Baden-Württemberg |
München | Bayern |
Berlin | Berlin |
Hamburg | Hamburg |
Frankfurt | Hessen |
Köln | Nordrhein-Westfalen |
Düsseldorf | Nordrhein-Westfalen |
Dortmund | Nordrhein-Westfalen |
Wir haben also Daten aus verschiedenen Tabellen miteinander verbunden.
In den meisten Fällen entsprechen die Beziehungen, wie sie automatisch aus dem Beziehungsfenster übernommen werden, genau dem, was wir für die Abfrage wollen. Falls wir doch einmal eine Abfrage erstellen wollen, für die noch keine Beziehung vordefiniert ist, oder für die wir eine andere Beziehung wünschen, kann man sie hier genauso definieren wie im Beziehungsfenster - natürlich gilt das dann nur für die betreffende Abfrage. Aber manchmal passen die vorhandenen Beziehungen doch nicht perfekt für die gewünschte Abfrage. Wir haben in unserer Ortstabelle beispielsweise nicht alle real existierenden Orte eingetragen. Die Abfrage gibt nur Datensätze aus, für die sowohl in der Länder- als auch der Ortstabelle Werte gefunden werden können. Um auch die Länder zu sehen, 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. Das
wird Left Join genannt.
Abfrage1 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
Die Abfrage zeigt nun auch Bundesländer an, für die gar kein Ort eingegeben wurde.
SELECT txtOrt, txtLand FROM tblLänder LEFT JOIN tblOrte ON tblLänder.IDLand = tblOrte.lngLand;
Abfrage1 | |
---|---|
txtOrt | txtLand |
Stuttgart | Baden-Württemberg |
München | Bayern |
Berlin | Berlin |
Brandenburg | |
Bremen | |
Hamburg | Hamburg |
Frankfurt | Hessen |
Mecklenburg-Vorpommern | |
Niedersachsen | |
Köln | Nordrhein-Westfalen |
Düsseldorf | Nordrhein-Westfalen |
Dortmund | Nordrhein-Westfalen |
Rheinland-Pfalz | |
Saarland | |
Sachsen | |
Sachsen-Anhalt | |
Schleswig-Holstein | |
Thüringen |
SELECT txtOrt, txtLand FROM tblLänder RIGHT JOIN tblOrte ON tblLänder.IDLand = tblOrte.lngLand;
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 zu keinem Bundesland gehören, also außerhalb Deutschlands liegen würden. Das wird „Right Join“ genannt.
SELECT txtOrt, txtLand FROM tblOrte LEFT JOIN tblLänder ON tblOrte.lngLand = tblLänder.IDLand;
Natürlich könnte man dann die beiden Tabellen im oberen Teil des Abfragefensters so verschieben, so dass der Pfeil wieder von links nach rechts zeigt. Daher wird hier ausnahmsweise einmal auf die grafische Darstellung verzichtet und nur die SQL-Ansicht gezeigt. Der nebenstehende SQL-Ausdruck ist zum äqivalent zum vorherigen. Nun mag man sich fragen, wozu man eigentlich einen „Right Join“ braucht, wenn man ihn auch zu einem „Left Join“ umformen kann? Aber wenn man es in einer Abfrage mit vielen Tabellen und vielen Joins zu tun hat, ist es gelegentlich sinnvoll, Left Join und Right Join zu kombinieren.