Geschrieben von: Christian Holm
Kategorie: Datenbank
This printed page brought to you by AlphaSierraPapa
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.
Bei 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.
Wie ü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:
Dieser 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.
This printed page brought to you by AlphaSierraPapa
ADO und ASP - Datenbanken einmal näher betrachtet
http:/www.aspheute.com/artikel/19990825.htm
Benutzerverwaltung leicht gemacht: Teil 1
http:/www.aspheute.com/artikel/20020429.htm
Datenaufbereitung in ADO.NET
http:/www.aspheute.com/artikel/20001106.htm
Der SQL UNION Operator
http:/www.aspheute.com/artikel/20011015.htm
Eigenschaften der Connection und Recordset Objekte
http:/www.aspheute.com/artikel/19990811.htm
Ein einfacher Query Analyzer
http:/www.aspheute.com/artikel/20010420.htm
Erstellung eines Intranets in ASP (Teil 2) - Setup
http:/www.aspheute.com/artikel/20010918.htm
Erstellung eines Intranets in ASP (Teil 5) - Application Day
http:/www.aspheute.com/artikel/20010921.htm
ODBC und ASP - Eine DSN zur Verwendung mit ASP definieren
http:/www.aspheute.com/artikel/19990826.htm
Stored Procedures einfach erstellt
http:/www.aspheute.com/artikel/20020903.htm
T-SQL Clauses: GROUP BY und HAVING
http:/www.aspheute.com/artikel/20011017.htm
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.