Ein grundlegendes SQL-Konzept, das beherrscht werden sollte, ist das der “Joins”. Joins ermöglichen die Anzeige von Daten aus verschiedenen Tabellen, die mit bestimmten Beziehungen kombiniert werden.

Ein “Join” in SQL ist ein Mittel, mit dem zusammengehörige Daten aus mehr als 1 Tabelle gemeinsam angezeigt werden können. Es gibt verschiedene Arten von Joins, aber dieser Artikel konzentriert sich ausschließlich auf den “inneren Join”. Mathematisch ausgedrückt ergibt ein Inner Join zwischen zwei Teilmengen von Daten (zwei Tabellen) die Schnittmenge dieser Teilmengen. Mit anderen Worten: Daten in beiden Tabellen, die in einem oder mehreren angegebenen Feldern die gleichen Werte haben.

Anhand eines Beispiels lässt sich am besten verdeutlichen, wie ein innerer Join funktioniert. Um dem Beispiel zu folgen und mit Joins zu spielen, richten Sie einen SQL-Server und eine Entwicklungsumgebung ein, wie in “SQL Server 2005 Express installieren” beschrieben. In der AdventureWorks-Beispieldatenbank listet die Tabelle HumanResources.Employee Mitarbeiterinformationen auf, aber es scheint der Name des Mitarbeiters zu fehlen. Eine Abfrage, um Mitarbeiter aufzulisten, die den Titel “Produktionstechniker – WC10” haben, würde zu einer unbefriedigenden Liste führen.

SELECT KontaktID, LoginID, Geschlecht, Geburtsdatum

FROM HumanResources.Employee

WHERE Titel = ‘Produktionstechniker – WC10’

ORDER BY KontaktID

Ein Teil des Ergebnisses folgt.

1071 abenteuer-arbeiten\ruth0 F 1946-07-06

1072 adventure-works\sidney0 M 1946-10-01

1073 abenteuer-arbeiten\jeffrey0 M 1946-08-12

1074 adventure-works\doris0 F 1946-05-06

Transact-SQL-Fibel: Inner Join: Lernen Sie, wie Sie Daten aus mehreren Tabellen in einer SQL-Abfrage kombinieren
Transact-SQL-Fibel: Inner Join: Lernen Sie, wie Sie Daten aus mehreren Tabellen in einer SQL-Abfrage kombinieren

In einem typischen Bericht würde das erste Feld, ContactID, für die meisten Anforderungen nicht ausreichen. Wenn der Name des Mitarbeiters erforderlich ist, wo könnte er gefunden und in diese Abfrage aufgenommen werden? An dieser Stelle wird ein Inner Join benötigt. Es gibt eine weitere Tabelle in dieser Datenbank, Person.Contact, die Kontaktinformationen, einschließlich Vor- und Nachnamen, enthält. Das “Primärschlüssel”-Feld, ein eindeutiger Bezeichner für jeden Kontakt, heißt “ContactID”. Das sieht hoffnungsvoll aus. Tatsächlich enthält dieses Feld die gleichen Kontakt-IDs wie das gleichnamige Feld in HumanResources.Employee. Durch die Verknüpfung der beiden Tabellen über das Feld “ContactID” können die Daten in beiden Tabellen in der Abfrage verwendet werden.

SELECT c.LastName, c.FirstName, e.LoginID, e.Gender, e.BirthDate

FROM HumanResources.Mitarbeiter e

JOIN Person.Kontakt c

ON c.KontaktID = e.KontaktID

WHERE e.Title = ‘Produktionstechniker – WC10’

ORDER BY c.LastName, c.FirstName

Beachten Sie zunächst die einbuchstabigen Präfixe vor jedem ausgewählten Feld, “c.” und “e.”. Diese werden “Alias” genannt und sind eine Möglichkeit, sich auf eine Tabelle zu beziehen, indem man einen kürzeren Namen als den eigentlichen Tabellennamen verwendet. Jeder Alias wird definiert, wenn die zugehörige Tabelle verwendet wird. Sehen Sie sich die drei Zeilen an, die mit FROM, JOIN und ON beginnen. Die Datensätze werden wie in der ersten Abfrage aus der Tabelle HumanResources.Employee (e) ausgewählt. Diesmal wird sie jedoch mit der Tabelle Person.Contact (c) “verbunden” und die Verbindungsbeziehung zwischen den beiden Tabellen ist das Feld “ContactID”. Es folgt ein Teil der Ergebnisse.

Baker Mary Abenteuer-Werke\mary1 F 1976-10-20

Ellerbrock Ruth Abenteuer-Werke\ruth0 F 1946-07-06

Ersan Ebru abenteuer-works\ebru0 M 1976-10-23

Ford Jeffrey adventure-works\jeffrey0 M 1946-08-12

Üben Sie die Verwendung einiger anderer innerer Verknüpfungen. Es gibt ähnliche Beziehungen zwischen den Tabellen Production.Product und Production.ProductModel, sowie Production.Product und Sales.SalesOrderDetail.