SQL Join 4 Beispiele | einfache Erklärung mit allen 6 TYPEN

SQL Join Tutorial- Coding Lab Steffen Lippke Tutorial GUIDE
SQL Join Tutorial- Coding Lab Steffen Lippke Tutorial GUIDE

Was ist eine SQL Join und wie funktioniert dieser?

Inner, Left, Right Join … ??

Ich erkläre Dir in diesem Tutorial, wie einfach ein Join ist und was für „bessere“ Alternativen Du kennen solltest.

Beginnen wir!

Grundlagen zu SQL Join

Mit diesem Grundlagen-Wissen verstehst Du die Typen von Joins besser im Praxis-Teil besser und schneller.

Was ist ein SQL Join?

Ein Join führt inhaltlich verknüpfte Zeilen aus zwei Tabellen zusammen.

Die Verknüpfung der Zeilen funktioniert über Primär- und Fremdschlüssel, die wie ein HTTP-Link aufeinander zeigen.

Primärschlüssel sind nur einmalig in der Tabelle vorhanden, während Fremdschlüssel mehrfach auf eine Zeile in einer anderen Tabelle verweisen können.

00 phpmyadmin - Coding Lab Steffen Lippke SQL Join einfach erklärt
00 phpmyadmin – Coding Lab Steffen Lippke SQL Join einfach erklärt

Beispiel: 2 Tabellen mit Join verbinden

  1. Tabelle: Produkt-Name mit einer Kategorie-Nummer als Fremdschlüssel
  2. Tabelle: Kategorie-Namen mit einer Kategorie-Nummer als Primärschlüssel

Bei der Zusammenführung von der Tabelle 1 und 2 erhält jedes Produkt neben der Kategorie-Nummer den Klartext der Kategorie.

05 Neue Tabellen anlegen - Coding Lab Steffen Lippke SQL Join einfach erklärt
05 Neue Tabellen anlegen – Coding Lab Steffen Lippke SQL Join einfach erklärt

Wann verwende ich einen SQL Join?

Wenn Du versuchst aus mehreren normalisierten Tabellen menschlich lesbare Informationen zu gewinnen und Du Dir nicht nur Indizes ansehen willst, brauchst Du einen Join.

Praxis: Typen von SQL Join erklärt

  • Inner Join ist die Schnittmenge aus der Tabelle 1 und der Tabelle 2
  • Einen X-fachen Join brauchst Du, um mehrere Tabellen zu verbinden (mehrere Join-Typen und Verwendungen notwendig)
  • Ein Left Join besteht aus allen Reihen aus der linken Tabelle mit den angefügten Spalten aus der rechten. Einige Reihen aus der linken Tabelle können keinen Partner haben (NULL)
  • Ein Right Join besteht aus allen Reihen aus der rechten Tabelle mit angefügten Spalten aus der linken. Einige Reihen aus der rechten Tabelle können keinen Partner haben (NULL)
  • Ein Full Other Join besteht aus allen Reihen aus der linken und der rechten Tabelle. Linke und rechte Reihen können keinen Partner haben (NULL)
  • Beim Self Join verbindest Du eine Tabelle mit der gleichen Tabelle (unten erklärt)

Beispiel für die SQL-Befehele

Als Beispiel habe ich ein Lagerverwaltungstool verwendet.

05 Neue Tabellen anlegen - Coding Lab Steffen Lippke SQL Join einfach erklärt
05 Neue Tabellen anlegen – Coding Lab Steffen Lippke SQL Join einfach erklärt

Hier kannst Du die SQL herunterladen.

product_idproduct_namecategory_id_fkwarehouse_id_fk
0Monitor X500 USB C12
1Drohne 16K M10022
2Phone SuperSlim10033
Tabelle 1 products

category_idcategory_name
1Monitore
2Fluggeräte
3Smartphones
4Kaffeemaschinen
Tabelle 2 categories

warehouse_idwarehouse_name
1Außenlager
2Sicherheitslager
3Hochstapellager
4Tresorraum
Tabelle 3 warehouse

01 einfaches Select - Coding Lab Steffen Lippke einfach erklärt
01 einfaches Select – Coding Lab Steffen Lippke SQL Join einfach erklärt

Inner Join

In welchen Lagern liegt, welches Produkt?

Ein Inner Join kann Dir helfen. Die Ergebnis-Tabelle zeigt keine Produkte, die in keinem Lager liegen (out of stock), und keine Lager die leer sind

SELECT products.product_name, categories.category_name
FROM products
INNER JOIN categories ON products.category_id_fk = categories.category_id

Ergebnis: Alle Produkte mit Kategorie-Namen in Klartext

product_namecategory_name
Monitor X500 USB CMonitore
Drohne 16K M100Fluggeräte
Phone SuperSlim100Smartphones
BestPhone 1000Smartphones
02 Inner Join - Coding Lab Steffen Lippke SQL Join einfach erklärt
02 Inner Join – Coding Lab Steffen Lippke SQL Join einfach erklärt

Join mehrfach

Wenn Du noch das Warehouse hinzufügen willst, verwende den Inner Join zweifach:

SELECT products.product_name, categories.category_name, warehouse.warehouse_name
FROM products
INNER JOIN categories ON products.category_id_fk = categories.category_id
INNER JOIN warehouse ON products.warehouse_id_fk = warehouse.warehouse_id

Ergebnis: Du erhältst eine Übersicht über Produkte mit ihrer Kategorie-Bezeichnung und dem Lagerort.

product_namecategory_namewarehouse_name
Monitor X500 USB CMonitoreSicherheitslager
Drohne 16K M100FluggeräteSicherheitslager
Phone SuperSlim100SmartphonesHochstapellager
BestPhone 1000SmartphonesSicherheitslager

Left Join

Du willst nur alle Produkte anzeigen? Leere Kategorien interessieren Dich nicht`? Mit dem Left Join schneidest Du den Rest ab.

SELECT products.product_name, categories.category_name
FROM products
LEFT JOIN categories ON products.category_id_fk = categories.category_id

Ergebnis: Jedes Produkt ist eine Kategorie zu geordnet.

product_namecategory_name
Monitor X500 USB CMonitore
Drohne 16K M100Fluggeräte
Phone SuperSlim100Smartphones
BestPhone 1000Smartphones
03 Left Join – Coding Lab Steffen Lippke SQL Join einfach erklärt

Right Join

Lasse Dir alle Kategorien anzeigen, wenn kein Produkt der Kategorie zugeordnet ist. NULL beschreibt ein leeres Feld.

SELECT products.product_name, categories.category_name
FROM products
RIGHT JOIN categories ON products.category_id_fk = categories.category_id

Ergebnis: Im Bereich Kaffeemaschienen gibt es im Lager keine Produkte.

product_namecategory_name
Monitor X500 USB CMonitore
Drohne 16K M100Fluggeräte
Phone SuperSlim100Smartphones
BestPhone 1000Smartphones
NULLKaffeemaschinen

Full Other Join

Du brauchst alle Daten aus beiden Tabellen? Nutze den Full Other Join!

MySQL stellt keinen Kurzbegriff für den Full Other Join zur Verfügung.

Du erzeugst diesen Join mit einer Vereinigung der Tabellen aus einem Right Join und Left Join. Bei einer Vereinigung fügt die Datenbank alle Tabellenzeilen zusammen und sortiert die doppelten Zeilen heraus.

SELECT products.product_name, categories.category_name
FROM products
RIGHT JOIN categories ON products.category_id_fk = categories.category_id
UNION
SELECT products.product_name, categories.category_name
FROM products
LEFT JOIN categories ON products.category_id_fk = categories.category_id

Ergebnis: Weil jedes Produkt eine Kategorie hat, steht in der category_name Spalte keine NULL. Über Constraints kannst Du vermeiden, dass ein Sachbearbeiter-Depp ein Produkt ohne Kategorie anlegt.

product_namecategory_name
Monitor X500 USB CMonitore
Drohne 16K M100Fluggeräte
Phone SuperSlim100Smartphones
BestPhone 1000Smartphones
NULLKaffeemaschinen

Self Join

Vergesse nicht, dass Du eine Tabelle mit sich selbst verbinden lassen kannst. Bei Hierarchien ist die ID, die ID auf den Chef verweist. Nur der CEO ist nach der Logik von SQL sich selbst sein Chef J

IDNameBossID
0CEO Gründer Gründer0
1Mr. Abteilungsleiter Schlau0
2Mrs. Mitarbeiterin1

Ergebnis: Ein Self Join bewikt eine Selbstverknüpfung:

IDNameBossIDNameBossBossIDvonBoss
0CEO Gründer Gründer0CEO Gründer Gründer0
1Mr. Abteilungsleiter Schlau0CEO Gründer Gründer0
2Mrs. Mitarbeiterin1Mr. Abteilungsleiter Schlau1

Mehrere Self Joins ermöglichen die Suche nach dem X-ten Vorgesetzten.

Praxis-Performance beim SQL Join

Hast Du einen Join mit großen Tabellen (+ 10.000 Zeilen) versucht? In der Uni / Schule lernst Du brav den Join – in der Praxis (bei großen Datenmengen) ist dieser großer Mist …

Join schneller ausführen

Die Ausführung eines Joins ist sehr Prozessor- und RAM-lastig. Ein SAP-System kann ca. 60.000 Tabellen haben und bei manchen Konten 100.000 Zeilen haben. Entweder Du…

  • … käufst Dir eine stärkere Maschine (RAM, CPU)
  • … beschränkst die Daten Deines Joins
  • … verwendest Krücken wie einem Material Views oder ähnliches
  • … optimierst die Join-Abfrage mit speziellen Regeln
  • … oder vermeidest den Join und machst die Abfragen gleich korrekt

Big Data und Join? NoSQL ist die Lösung!

Bei großen Datenmengen und vielen Tabellen solltest Du auf NoSQL umsteigen. NoSQL speichert Datensätze nicht in Tabellen, sondern in Dokumenten wie JSONs.

06 Cassandra NoSQL - Coding Lab Steffen Lippke SQL Join einfach erklärt
06 Cassandra NoSQL – Coding Lab Steffen Lippke SQL Join einfach erklärt

„Moderne Unternehmen“ verwenden …

  • Apache Hadoop nach Googles Big Table (für Petabytes an Daten)
  • Apache Cassandra mit hoher Ausfallsicherheit
  • CouchDB mit eigener HTTP-Schnittstelle
  • MongoDB mit BSON

Du hast keine vorgegebenen Spaltenbezeichnungen, sondern Indizes, die über alle Dokumente hinweg die Daten dursuchbar machen.

07 Couch DB NoSQL - Coding Lab Steffen Lippke einfach erklärt
07 Couch DB NoSQL – Coding Lab Steffen Lippke SQL Join einfach erklärt

Rechnerarchitektur für schnelle SQL Joins

Eine einzelne Maschine zu kaufen ist voll 80er Jahre.

Selbst mit eienr NoSQL brauchst Du viel Rechenpower. Miete Dir in einem hochmodernen Cluster mehr Systemressourcen an, wenn Du diese für die Ausführung brauchst.

04 Tools um Tabellen schneller beim Join zu machen - Coding Lab Steffen Lippke einfach erklärt
04 Tools um Tabellen schneller beim Join zu machen – Coding Lab Steffen Lippke SQL Join einfach erklärt
Quelleangabe Bilder: Icons und SVG-Grafiken im Titelbild von Microsoft PowerPoint 2019, frei verfügbar nach EULA

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.