Das SQL Join Statement
Geschrieben von: Christian Holm Dieser Artikel soll Ihnen die Grundlagen des SQL Join Statements vermitteln. Zuerst besprechen wir die Funktion von Join und die Möglichkeiten die das Statement bietet. Mit ein paar einfachen Beispielen wird Ihnen die Verwendung rasch in Fleisch und Blut übergehen. Damit die Praxis nicht außen vor bleibt, testen wir ausgewählte Beispiele mit dem Microsoft SQL Query Analyzer, der den Enterprise Tools des Microsoft SQL Servers beiliegt. Als Beispielgrundlage habe ich die schon seit längeren bekannte "Northwind" Datenbank verwendet. Diese wird standardmäßig mit dem MS SQL Server installiert. Dadurch, daß diese Datenbank ein gewisses Maß an Komplexizität aufweist, aber dennoch überschaubar ist, eigenet sie sich hervorragen für Übungsbeispiele. Praktische Anwendung des Join StatementsBei komplexen und umfangreichen Datenbanken versucht man die Daten strukturiert abzulegen, ohne den Überblick zu verlieren. In unserem Fall, am Beispiel der Northwind Datenbank sind die Daten in mehrere Einzeltabellen unterteilt. So zum Beispiel sind die Datensätze der Produkte (Products), Lieferanten (Suppliers) oder die Kunden (Customers) in eigenen, separaten Tabellen physikalisch gespeichert (eine typische, transaktionsorientierte Datenbank). Nun sollen Sie aber anhand von Ihnen erstellten Kriterien Abfragen (Queries) erstellen um Informationen aus der Datenbank zu gewinnen. Sie möchten zum Beispiel wissen, welche Lieferanten Produkte vertreiben die maximal USD 70 kosten. Da aber die Produktdaten in einer physikalisch anderen Tabelle gespeichert sind als die Lieferantendaten, müssen Sie eine Abfrage erstellen, die die zwei Tabellen miteinander verbindet. Grundsätzlich können Sie mit dem Join Statement zwei oder mehr Tabellen miteinander zu verbinden. Das Ergebnis stellt sich als Reihen und Spalten der angegebenen Tabelle dar. In den meisten Fällen werden Tabellen mit Join "verbunden" wenn sie etwas gemeinsam haben. Diese Gemeinsamkeit kann sich unter anderem in Form eines Fremdschlüssels darstellen. Die obige Problemstellung aufgreifend, erhalten Sie mit Hilfe des "Join" Statements alle Produkte die die Lieferanten um maximal USD 70 verkaufen. Die Vorgehensweise ist bei diesem Beispiel schlicht und ergreifend einfach. Um aber nicht mit der Erklärung irgendwo in der Mitte anzufangen, beginnen wir bei der Beziehung (Relationship) der beiden Tabellen. Diese Beziehung läßt sich am einfachsten im MS SQL Enterprise Manager darstellen. Diesen finden Sie bei standardmäßiger Installation in der Programmgruppe Microsoft SQL Server unter dem Eintrag Enterprise Manager. Die folgende Abbildung zeigt die Beziehung der beiden Tabellen Suppliers (Lieferanten) und Products (Produkte) im SQL Enterprise Manger. Die Beziehung ist so definiert, daß es für einen Lieferanten mehrere Produkte geben kann. Dies erkennt man an der Form des Joins. Bei der Suppliers Tabelle ist dies ein Schlüssel, d.h. eine eindeutige Zuordnung. Bei der Produkte Tabelle ist dies ein unendlich Zeichen, das eine mehrfache Zuordnung bedeutet. Wenn Sie also Joins verwenden, können Sie Daten aus zwei oder mehreren Tabellen erhalten die zueinander in logischen Beziehungen stehen. Joins weisen den SQL Server an, daß er Daten von einer Tabelle verwenden soll, um in einer anderen Datenreihen auszuwählen. Das Join Statement definiert auf zwei Arten wie Tabellen in einer Abfrage zueinander stehen:
Zum ersten Punkt sei noch angemerkt, daß Join üblicherweise auf einen Fremdschlüssel einer Tabelle hinweist, und auf einen Primärschlüssel referenziert, der in einer anderen Tabelle abgelegt ist. Die explizite Angabe von Joins in einer From Abfrage hilft bei der Trennung von anderen Suchkritereien welche z.B. in Verbindung mit dem Keyword Where verwendet werden könnten. Im einfachsten Fall sieht ein Join Statement so aus: FROM QuellTabelle1 [Join-Typ] Tabelle [ON (Join Bedingung)] Join-Typ gibt Art des Joins an der angewendet werden soll. Gebräuliche Statements sind INNER oder OUTER Join. Die Join Bedingung definiert die Art der Evaluierung jedes Paares an verbundenen Datenreihen der Tabellen. In diesem Artikel möchte ich mich auf die Verwendung des INNER Joins beschränken. Outer Join möchte ich nur kurz anführen.
Um das Outer Join Statement zu präzisieren, und somit das Ergebnis der retounierten Daten einzuschränken bzw. zu erweitern gibt es drei Abwandlungen (LEFT, RIGHT und FULL). Diese Abwandlungen möchte ich aber in diesem Artikel nicht weiter abhandeln. Beachte: Um etwaige Komplikationen zu vermeiden, sollten Sie, wenn Sie einen Inner Join verwenden wollen immer auch Inner Join anstatt nur Join angeben. Testen einer AbfrageWie üblich folgt nun der praktische Teil, indem wir das zuvor erlernte in die Tat um setzten. Wie eingangs erwähnt, wollen wir alle Produkte der Northwind Datenbank auslesen, die maximal USD 70 kosten. Sinnvollerweise lassen wir uns um detailliertere Information über die Produkte zu erhalten, noch die Lieferanten und den tatsächliche Preis der Ware anzeigen. Um unser Gedankenexperiment schnell und einfach auszuprobieren kommt der MS SQL Query Analyzer zum Einsatz. Diesen finden Sie bei standardmäßiger Installation in der Programmgruppe Microsoft SQL Server unter dem Eintrag Query Analyzer. Nun müssen wir noch die SQL-Abfrage erstellen. Dies ist nicht weiter tragisch und könnte etwa so aus sehen: SELECT ProductName, CompanyName, UnitPrice FROM Suppliers INNER JOIN Products ON (Suppliers.SupplierID = Products.SupplierID) WHERE UnitPrice <= $70 Um dieses Statement zu testen öffnen Sie den Query Analyzer und verbinden sich mit einem Ihnen zur Verfügung stehenden MS SQL Server (local oder remote). Nach bestätigen der Auswahl des Servers öffnet sich auch schon das Query Fenster. Dann selektiern wir die Northwind Datenbank in der Auswahl-Pulldown Listbox des Standard Toolbars. Nun tippen Sie das SQL Statements in das Query Fenster ein. Nach dem Code Check (Button mit dem blauen Häkchen) lassen wir den Code ablaufen (grüner Pfeil Button). Der folgende Screenshot zeigt einige Datensätze, die wir durch die Abfrage erhalten haben. Als Draufgabe und weil wir die Kriterien noch genauer festlegen wollen, möchten wir zusätzlich nur die Lieferanten deren Name mit "G" anfangen. Der folgende Sourccode zeigt die kleine Veränderung: SELECT ProductName, CompanyName, UnitPrice FROM Suppliers INNER JOIN Products ON (Suppliers.SupplierID = Products.SupplierID) WHERE UnitPrice <= $70 AND CompanyName LIKE 'G%' Das Resultat präsentiert sich wie folgt: SchlußbemerkungDieser Artikel zeigt den Einsatz des Join Statements in Zusammenhang mit dem Einsatz des MS SQL Servers bzw. des SQL Query Analyzers. Sie sollten jetzt in der Lage sein, aus komplexeren Datenbanken mit einer einfachen Kombination von SQL Statements reichhaltige Informationen zu gewinnen - und diese in ADO auslesen können. Verwandte Artikel
ADO und ASP - Datenbanken einmal näher betrachtet Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |