MySQL - Volle Außenverbindung

Hallo da draußen, ambitionierte Datenbankbegeisterte! Heute tauchen wir in die aufregende Welt von MySQL ein und erkunden ein leistungsstarkes Werkzeug in unserer SQL-Werkzeugkiste: die Volle Außenverbindung (Full Join). Keine Sorge, wenn du neu im Programmieren bist; ich werde dich durch dieses Konzept Schritt für Schritt führen, genau wie ich es in den letzten Jahren für unzählige Schüler getan habe. Also hole dir eine Tasse Kaffee (oder Tee, wenn das dein Favorit ist) und lassen wir gemeinsam diese Lernreise antreten!

MySQL - Full Join

Was ist eine Volle Außenverbindung?

Bevor wir uns den Feinheiten der Volle Außenverbindung in MySQL widmen, beginnen wir mit einer einfachen Analogie. Stell dir vor, du planst eine Party und hast zwei Gästelisten: eine von deinem bestem Freund und eine von deinem Geschwisterkind. Eine Volle Außenverbindung ist so, als ob du diese Listen auf eine Weise kombinierst, dass alle Personen aus beiden Listen enthalten sind, auch wenn sie nur auf einer Liste stehen.

In Datenbankterminologie kombiniert eine Volle Außenverbindung Zeilen aus zwei oder mehr Tabellen basierend auf einer verwandten Spalte zwischen ihnen, einschließlich aller Zeilen aus allen Tabellen, auch wenn es in den anderen Tabelle(n) keine Übereinstimmung gibt.

Die Syntax

Hier ist die grundlegende Syntax für eine Volle Außenverbindung in SQL:

SELECT Spalten
FROM Tabelle1
FULL JOIN Tabelle2
ON Tabelle1.Spalte = Tabelle2.Spalte;

Jetzt kann ich fast hören, wie du sagst: " Aber wartet! MySQL hat kein FULL JOIN Schlüsselwort!" Und du hättest完全 recht! MySQL unterstützt FULL JOIN nicht direkt, aber keine Sorge – wir haben einen klugen Workaround mit UNION. Lassen wir uns das im Detail anschauen.

MySQL Volle Außenverbindung (Using UNION)

Da MySQL keine integrierte Volle Außenverbindung hat, können wir sie durch eine Kombination von Linksaußenverbindung (LEFT JOIN) und Rechtsaußenverbindung (RIGHT JOIN) mit UNION simulieren. Hier ist, wie es funktioniert:

SELECT t1.spalte1, t1.spalte2, t2.spalte1, t2.spalte2
FROM Tabelle1 t1
LEFT JOIN Tabelle2 t2 ON t1.id = t2.id
UNION
SELECT t1.spalte1, t1.spalte2, t2.spalte1, t2.spalte2
FROM Tabelle1 t1
RIGHT JOIN Tabelle2 t2 ON t1.id = t2.id;

Lassen wir das auseinanderbrechen:

  1. Wir führen eine Linksaußenverbindung durch, um alle Zeilen aus Tabelle1 zu erhalten, zusammen mit den passenden Zeilen aus Tabelle2.
  2. Wir verknüpfen dies dann mit einer Rechtsaußenverbindung, die alle Zeilen aus Tabelle2 zusammen mit den passenden Zeilen aus Tabelle1 erhält.
  3. Die UNION kombiniert diese Ergebnisse, wodurch wir effektiv eine Volle Außenverbindung erhalten.

Ein praktisches Beispiel

Um das alles konkreter zu machen, verwenden wir ein realitätsnahes Beispiel. Stellen wir uns vor, wir verwalten eine kleine Bibliothek und haben zwei Tabellen: books und borrowers.

Zuerst erstellen wir diese Tabellen:

CREATE TABLE books (
book_id INT PRIMARY KEY,
title VARCHAR(100),
author VARCHAR(100)
);

CREATE TABLE borrowers (
borrower_id INT PRIMARY KEY,
book_id INT,
borrower_name VARCHAR(100)
);

INSERT INTO books VALUES (1, 'To Kill a Mockingbird', 'Harper Lee');
INSERT INTO books VALUES (2, '1984', 'George Orwell');
INSERT INTO books VALUES (3, 'Pride and Prejudice', 'Jane Austen');

INSERT INTO borrowers VALUES (1, 1, 'Alice');
INSERT INTO borrowers VALUES (2, NULL, 'Bob');
INSERT INTO borrowers VALUES (3, 4, 'Charlie');

Jetzt führen wir unsere Volle Außenverbindung durch:

SELECT b.book_id, b.title, br.borrower_id, br.borrower_name
FROM books b
LEFT JOIN borrowers br ON b.book_id = br.book_id
UNION
SELECT b.book_id, b.title, br.borrower_id, br.borrower_name
FROM books b
RIGHT JOIN borrowers br ON b.book_id = br.book_id;

Diese Abfrage gibt uns das folgende Ergebnis:

book_id title borrower_id borrower_name
1 To Kill a Mockingbird 1 Alice
2 1984 NULL NULL
3 Pride and Prejudice NULL NULL
NULL NULL 2 Bob
NULL NULL 3 Charlie

Lassen wir das Ergebnis analysieren:

  • Wir sehen alle Bücher, sogar diejenigen, die nicht ausgeliehen wurden (wie '1984' und 'Pride and Prejudice').
  • Wir sehen alle Ausleiher, sogar diejenigen, die derzeit kein Buch ausleihen (wie Bob).
  • Wir sehen sogar Charlie, der ein Buch ausleiht, das nicht in unserer books-Tabelle ist (book_id 4).

Dies ist die Macht einer Volle Außenverbindung – sie gibt uns ein vollständiges Bild unserer Daten, indem sie sowohl Übereinstimmungen als auch Unverträglichkeiten zwischen unseren Tabellen hervorhebt.

Volle Außenverbindung mit WHERE-Klausel

Manchmal möchten wir unsere Ergebnisse der Volle Außenverbindung filtern. Dies können wir tun, indem wir eine WHERE-Klausel zu unserer Abfrage hinzufügen. Zum Beispiel, wenn wir alle Bücher finden möchten, die derzeit nicht ausgeliehen werden:

SELECT b.book_id, b.title, br.borrower_id, br.borrower_name
FROM books b
LEFT JOIN borrowers br ON b.book_id = br.book_id
WHERE br.borrower_id IS NULL
UNION
SELECT b.book_id, b.title, br.borrower_id, br.borrower_name
FROM books b
RIGHT JOIN borrowers br ON b.book_id = br.book_id
WHERE b.book_id IS NULL;

Diese Abfrage gibt uns das folgende Ergebnis:

book_id title borrower_id borrower_name
2 1984 NULL NULL
3 Pride and Prejudice NULL NULL
NULL NULL 2 Bob
NULL NULL 3 Charlie

Dieses Ergebnis zeigt uns:

  • Bücher, die nicht ausgeliehen werden ('1984' und 'Pride and Prejudice')
  • Ausleiher, die derzeit kein Buch ausleihen (Bob)
  • Ausleiher, die ein Buch ausleihen, das nicht in unserer books-Tabelle ist (Charlie)

Schlussfolgerung

Und da haben wir es, meine lieben Schüler! Wir haben die Welt der Volle Außenverbindung in MySQL durchquert, von der Verständnis des Konzepts bis zur Implementierung mit realen Beispielen. Denke daran, dass MySQL zwar keine integrierte FULL JOIN Unterstützung hat, wir aber das gleiche Ergebnis mit einer Kombination aus LEFT JOIN, RIGHT JOIN und UNION erreichen können.

Volle Außenverbindungen sind unglaublich nützlich, wenn du alle Daten aus mehreren Tabellen sehen möchtest, unabhängig davon, ob es zwischen ihnen Übereinstimmungen gibt oder nicht. Sie sind wie der inklusive Freund auf einer Party, der sicherstellt, dass jeder beteiligt ist, egal ob sie sich kennen oder nicht!

Während du deine MySQL-Abenteuer fortsetzt, übe mit verschiedenen Szenarien. Je mehr du mit diesen Konzepten experimentierst, desto wohler wirst du werden. Und wer weiß? Vielleicht wirst du ja zum Datenbankexperten unter deinen Freunden!

Frohes Coden und möge deine Abfragen stets die gewünschten Ergebnisse liefern!

Credits: Image by storyset