Zurück zur Artikelliste Artikel
7 Leseminuten

Wie man zwei Tabellen in SQL verbindet

Die Abfrage von Daten aus mehreren Tabellen kommt bei der Arbeit mit relationalen Datenbanken häufig vor. Es ist nicht schwierig, wenn Sie wissen, wie man die entsprechenden SQL-Operatoren dafür verwendet. In diesem Artikel erfahren Sie, wie man zwei Tabellen mit Hilfe von WHERE und dem speziellen Operator JOIN verbindet und wie man Zeilen in der Ergebnismenge filtert.

Wenn Sie das Verbinden von Tabellen in SQL üben möchten, schauen Sie sich unseren interaktiven SQL-JOINs Kurs an. Er bietet über 90 praktische Übungen zu verschiedenen Arten von JOINs. Weitere SQL-Übungskurse finden Sie in unserem SQL-Praxis Kurs.

Wie man Daten aus einer einzelne Tabelle abfragt

Zunächst eine kurze Auffrischung, wie man Daten aus einer einzelnen Tabelle auswählt. Betrachten Sie die folgende Tabelle product:

idnameprice
1Smartwatch Erin234.00
2Smartwatch Sun455.00
3Smartband Eli300.00
4Smartband White124.00

Um Daten aus allen Spalten und allen Zeilen dieser Tabelle auszuwählen, können Sie die folgende Abfrage verwenden:

SELECT id, name, price 
FROM product;

In dieser einfachen Abfrage werden die Namen der Spalten, aus denen Sie Daten abrufen möchten, nach SELECT aufgeführt. Danach folgt das Schlüsselwort FROM und der Name der Tabelle, in der die Daten gespeichert sind.

Sie können auch Zeilen filtern, um nur die Datensätze zurückzugeben, die den angegebenen Kriterien entsprechen. Werfen Sie einen Blick auf den folgenden SQL-Code:

SELECT name, price 
FROM product
WHERE price < 250.00;

In diesem Fall besteht die Ergebnismenge nur aus zwei Zeilen mit den Spalten name und price:

nameprice
Smartwatch Erin234.00
Smartband White124.00

Die Spalten werden nach SELECT aufgelistet und das Schlüsselwort FROM gibt die Tabelle an, aus der Sie die Daten abrufen. Am Ende der Abfrage folgt auf das Schlüsselwort WHERE die Filterbedingung. In diesem Beispiel vergleicht die Bedingung den Wert in der Spalte price mit 250,00. Die Abfrage gibt die Details zu einem Produkt nur dann zurück, wenn der Preis dieses Produkts weniger als 250,00 beträgt.

Abfrage von Daten aus mehreren Tabellen mit WHERE

Relationale Datenbanken bestehen aus mehreren Tabellen, die aufeinander verweisen. Zeilen aus einer Tabelle verweisen auf bestimmte Zeilen in einer anderen Tabelle, die durch eine oder mehrere ID-Spalten verbunden sind. Wir werden uns nun ansehen, wie man Daten aus einer Tabelle mit Daten aus einer anderen Tabelle verbindet.

Betrachten Sie die folgenden zwei Tabellen product und category in einer Datenbank mit Produkten in einem Lagerhaus:

product

idproduct_namepricecategory_id
1smartwatch235.002
2bricks26.703
3lamp128.002
4sofa3200.001
5desk1350.001
6power strip29.002

category

idcategory_name
1furniture
2electronics
3toys

Angenommen, Sie benötigen einige Details aus dieser Lagerdatenbank, wie z. B. den Namen der Produkte, den Preis und ihre zugehörigen Kategorien. Sie können Zeilen aus der Tabelle product mit Zeilen aus der Tabelle category verbinden, indem Sie eine WHERE-Klausel verwenden. Schauen Sie sich die folgende Abfrage an:

SELECT product.product_name, product.price, category.category_name 
FROM product, category 
WHERE product.category_id = category.id ;

Hier ist das Ergebnis:

product_namepricecategory_name
smartwatch235.00electronics
bricks26.70toys
lamp128.00electronics
sofa3200.00furniture
desk1350.00furniture
power strip29.00electronics

Das SELECT in dieser Abfrage listet Spalten aus beiden Tabellen auf: product_name und price aus der product Tabelle und category_name aus der category Tabelle. Jedem Spaltennamen wird der Name der entsprechenden Tabelle vorangestellt, getrennt durch einen Punkt.

Als nächstes werden die Namen der Tabellen nach dem Schlüsselwort FROM aufgelistet, getrennt durch Kommas.

Der letzte Teil dieser Abfrage ist ein WHERE mit einer Bedingung, die angibt, wie die Zeilen aus beiden Tabellen zusammengefügt werden sollen. Hier entsprechen die Werte der Spalte category_id aus der Tabelle product den Werten in der Spalte id aus der Tabelle category. Die Zeilen werden verbunden, wenn die Werte gleich sind (product.category_id = category.id). Die "smartwatch" in der Tabelle product hat die Kategorie-ID 2. Der gleiche Wert in der Spalte id in der Tabelle category zeigt auf "electronics", wie oben blau hervorgehoben.

Wenn es in beiden Tabellen Spalten mit demselben Namen gibt, müssen sie unterschieden werden, wenn Sie sie in SELECT benennen. Sie tun dies, indem Sie die Tabelle benennen, gefolgt von einem Punkt und dem Namen der Spalte. In unserem Beispiel haben die Tabellen jedoch unterschiedliche Spaltennamen, die keine Gemeinsamkeiten aufweisen. Wir können nur die Spaltennamen in SELECT verwenden, ohne anzugeben, aus welchen Tabellen sie stammen. Wie in der folgenden Abfrage:

SELECT product_name, price, category_name 
FROM product, category 
WHERE product.category_id = category.id ;

Die Verwendung von WHERE ist eine Möglichkeit, Daten aus mehreren Tabellen abzufragen. Es handelt sich um einen älteren SQL-Standard, der zwar noch verfügbar ist, aber nur noch selten verwendet wird. Im nächsten Abschnitt werden wir uns eine andere Methode ansehen.

Abfrage von Daten aus mehreren Tabellen mit JOIN

Die heute übliche Methode zur Verknüpfung von Daten aus mehreren Tabellen ist der spezielle Operator JOIN, auch bekannt als INNER JOIN. Um zu sehen, wie dieser funktioniert, verwenden wir dieselben zwei Tabellen aus der Lagerdatenbank, die Sie einfachheitshalber hier nochmal sehen.

product

idnamepricecategory_id
1smart watch235.002
2bricks26.703
3lamp128.002
4sofa3200.001
5desk1350.001
6power strip29.002

category

idname
1furniture
2electronics
3toys

Sehen Sie sich die folgende Abfrage an, die die Kategorie aus der Tabelle category zu jedem Produktnamen in der Tabelle product zuweist.

SELECT
  product.name AS product_name,
  category.name AS category_name
FROM product
JOIN category ON product.category_id=category.id;

Die Verknüpfung erfolgt mit dem Operator JOIN. In der FROM Klausel wird der Name der ersten Tabelle (product) von einem JOIN -Schlüsselwort gefolgt, danach von dem Namen der zweiten Tabelle (category). Dann folgen das Schlüsselwort ON und die Bedingung für die Verknüpfung der Zeilen aus den beiden Tabellen. Der Name der Kategorie wird auf der Grundlage der Spalte id der Tabelle category zugewiesen, die der category_id in der Tabelle product entspricht (product.category_id=category.id).

Hier ist die Ergebnismenge:

product_namecategory_name
smart watchelectronics
brickstoys
lampelectronics
sofafurniture
deskfurniture
power stripelectronics

Die "smart watch" hat den Wert category_id von 2. In der Spalte id der Tabelle category entspricht der Wert 2 mit "electronics", so dass die "smart watch" der Kategorie "electronics" zugeordnet wird.

Die Verwendung des JOIN Operators ist die gängigste Methode zur Verknüpfung mehrerer Tabellen in einer Datenbank. In dem Artikel "An Illustrated Guide to the SQL INNER JOIN" (Ein illustrierter Leitfaden zum SQL INNER JOIN) erkläre ich mehr über diesen Operator. Der Artikel "SQL INNER JOIN Explained in Simple Words" geht ebenfalls näher auf dieses Thema ein. Wie bereits erwähnt ist der Operator INNER JOIN gleichwertig mit JOIN. Sie können beide austauschbar verwenden.

Daten aus Tabellen mit JOIN und WHERE auswählen

Die Verwendung von JOIN Operatoren zum Abrufen von Daten aus mehreren Tabellen ermöglicht auch eine einfachere Filterung der Ergebnismenge. Schauen Sie sich die folgende Abfrage an, die eine Variante der vorherigen Abfrage ist und auf denselben Daten basiert:

SELECT
  product.name AS product_name,
  category.name AS category_name
FROM product
JOIN category ON product.category_id=category.id
WHERE category.name != ’toys’;

Hier ist das Ergebnis:

product_namecategory_name
smart watchelectronics
lampelectronics
sofafurniture
deskfurniture
power stripelectronics

Der erste Teil dieser Abfrage ist derselbe wie der letzte. In dieser Abfrage werden jedoch die Produkte der Kategorie "toys" ausgeschlossen. Wir filtern die Zeilen in der Ergebnismenge, indem wir eine WHERE Klausel verwenden, um zu prüfen, ob die Kategorie eine andere als "toys" ist (category.name != ’toys’).

Für weitere JOIN-Übungen in SQL lade ich Sie ein, unseren "Hands-on" SQL-JOINs Kurs zu besuchen, den Artikel "How to Practice SQL-JOINs" zu lesen oder das Video "SQL JOIN Basics" in der Serie "We Learn SQL" anzusehen .

Es gibt auch andere JOIN Operatoren. Zusätzlich zu JOIN oder INNER JOIN gibt es die Operatoren LEFT JOIN, RIGHT JOIN und FULL JOIN. Lesen Sie mehr über sie in "SQL-JOINs für Anfänger". Für weitere SQL-Übungen besuchen Sie unseren SQL-Praxis Kurs.

Verknüpfung von Tabellen in SQL

Wir haben gesehen, wie Sie alle Details von Objekten abrufen können, indem Sie mehrere Tabellen verbinden, die sich in einer relationalen Datenbank aufeinander beziehen. Dies können Sie mit WHERE oder mit JOIN erreichen. Um mehr über die Unterschiede zwischen diesen Methoden zu erfahren, empfehle ich den sehr interessanten Artikel "Was ist der Unterschied zwischen der Verwendung mehrerer Tabellen in FROM und JOIN?".

Ich habe Ihnen hier nur einen kleinen Einblick in dieses Thema gegeben. Also lernen Sie weiter!