Kurs
In diesem Lernprogramm erkläre ich den Unterschied zwischen SQL INNER JOIN
und OUTER JOIN
und verwende Beispiele. Nachdem wir dieses Problem gelöst haben, möchtest du vielleicht unseren Kurs Joining Data in SQL besuchen, in dem wir andere interessante Joins wie SELF JOIN
und CROSS JOIN
sowie größere Ideen wie die Mengenlehre behandeln.
Schnelle Antwort
INNER JOIN
liefert nur die übereinstimmenden Zeilen zwischen Tabellen, die auf einer gemeinsamen Spalte basieren, und schließt nicht übereinstimmende Zeilen aus. Die folgende Abfrage zeigt zum Beispiel nur dann Bestellungen mit Kundendaten an, wenn es eine Übereinstimmung gibt.
-- Inner Join: Returns only matching rows from both tables
SELECT o.OrderID, c.CustomerName
FROM Orders o
INNER JOIN Customers c ON o.CustomerID = c.CustomerID;
OUTER JOIN
enthält sowohl übereinstimmende Zeilen als auch nicht übereinstimmende Zeilen aus einer oder beiden Tabellen. Die folgende Abfrage gibt alle Kunden zurück, auch die, die keine Bestellungen haben.
-- Left Outer Join: Returns all rows from Customers and matching rows from Orders
SELECT c.CustomerName, o.OrderID
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
Ein genauer Blick auf SQL INNER JOIN und OUTER JOIN
Schauen wir uns nun SQL INNER JOIN
und OUTER JOIN
genauer an, eins nach dem anderen. Betrachte dazu die folgenden beiden Tabellen:
Beispiel einer Tabelle für Arbeitnehmer. Bild vom Autor.
Beispiel für eine Tabelle mit Abteilungen. Bild vom Autor.
Wie INNER JOIN funktioniert
Eine INNER JOIN
ruft nur die Zeilen ab, die in beiden Tabellen aufgrund der angegebenen Bedingung übereinstimmen.
Die folgende Abfrage wählt die Zeilen employee_id
, demployee_name
, department_name
und salary
aus und gibt dann die Zeilen zurück, in denen department_id
existiert.
-- Example: Get employees with matching departments
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
INNER JOIN departments
-- Returns only employees assigned to a department
ON employees.department_id = departments.department_id;
Beispiel einer Tabelle, die mit SQL INNER JOIN zusammengeführt wurde. Bild vom Autor.
Wie OUTER JOIN funktioniert
Die OUTER JOIN
enthält nicht übereinstimmende Zeilen aus einer oder beiden Tabellen, je nachdem, welche Art von OUTER JOIN
verwendet wird.
LEFT OUTER JOIN (LINKER JOIN)
Die LEFT OUTER JOIN
gibt alle Datensätze aus der linken Tabelle und die übereinstimmenden Datensätze aus der rechten Tabelle zurück. Wenn es keine Übereinstimmung gibt, werden NULL
Werte für Spalten aus der richtigen Tabelle zurückgegeben.
Im folgenden Beispiel werden alle Datensätze aus der Tabelle employees
abgerufen, auch wenn es nicht übereinstimmende Datensätze gibt. Das Fehlen von department_name
für Arbeitnehmer wird als NULL
zurückgegeben.
-- Get all employees, even those without a department
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;
Beispiel für eine Tabelle, die mit dem SQL Left Outer Join verbunden wurde. Bild vom Autor.
LEFT JOIN und LEFT OUTER JOIN werden in SQL austauschbar verwendet, da beide Abfragen alle Zeilen aus der linken Tabelle und die übereinstimmenden Zeilen aus der rechten Tabelle holen.
RIGHT OUTER JOIN (RECHTER JOIN)
Die RIGHT OUTER JOIN
gibt alle Datensätze aus der rechten Tabelle und die übereinstimmenden Datensätze aus der linken Tabelle zurück. Nicht übereinstimmende Zeilen in der linken Tabelle ergeben NULL
.
Die folgende Abfrage gibt alle Datensätze aus der Tabelle departments
zurück, auch wenn es keine passenden Arbeitnehmer gibt.
-- Get all departments, even those without employees
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.department_id;
Beispiel für einen Tale Join mit SQL Right Outer Join. Bild vom Autor.
VOLLSTÄNDIGE ÄUSSERE VERKNÜPFUNG
Die FULL OUTER JOIN
kombiniert die Ergebnisse von linken und rechten äußeren Joins. Sie liefert alle Datensätze aus beiden Tabellen und füllt NULL
aus, wenn es keine Übereinstimmungen gibt.
Die folgende Abfrage gibt alle Datensätze für die Tabellen employees
und departments
zurück, auch mit nicht übereinstimmenden Zeilen.
-- Combine all employees and departments
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
FULL JOIN departments
ON employees.department_id = departments.department_id;
Beispiel einer Tabelle, die mit SQL Full Outer Join verbunden wurde. Bild vom Autor.
INNER JOIN vs. OUTER JOIN: Die wichtigsten Unterschiede
INNER JOIN
und OUTER JOIN
unterscheiden sich grundlegend darin, wie sie nicht übereinstimmende Zeilen beim Zusammenführen von Tabellen behandeln. Diese Unterschiede zu verstehen, ist wichtig, um den richtigen Join-Typ für deine Datenbankabfragen zu wählen. Lass uns diese Unterschiede vergleichen.
Was INNER JOIN liefert
INNER JOIN
gibt nur die Zeilen zurück, deren Werte in beiden Tabellen übereinstimmen. Diese Art der Verknüpfung wird verwendet, wenn du Daten in beiden Datensätzen benötigst.
Die folgende Abfrage ruft Datensätze aus employees
mit übereinstimmenden Zeilen aus der Tabelle departments
ab.
-- Example: Get employees with matching departments
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
INNER JOIN departments
-- Returns only employees assigned to a department
ON employees.department_id = departments.department_id;
Beispiel einer Tabelle, die mit SQL INNER JOIN verbunden wurde. Bild vom Autor.
Was OUTER JOIN zurückgibt
OUTER JOIN
enthält nicht übereinstimmende Zeilen aus einer oder beiden Tabellen, je nach Typ von OUTER JOIN
. Zum Beispiel liefert die LEFT OUTER JOIN
alle Zeilen aus der linken Tabelle und die übereinstimmenden Zeilen aus der rechten Tabelle. Nicht übereinstimmende Zeilen aus der richtigen Tabelle werden mit NULLen versehen.
Die folgende Abfrage ruft Mitarbeiterdatensätze ab, auch solche ohne Abteilung.
-- Get all employees, even those without a department
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;
Beispiel für Daten, die mit SQL LEFT OUTER JOIN abgerufen werden. Bild vom Autor.
Wann verwendet man SQL INNER JOIN und OUTER JOIN?
INNER JOIN
und OUTER JOIN
unterscheiden sich auch in ihren praktischen Anwendungsfällen bei der Datenabfrage.
Wann wird INNER JOIN verwendet?
INNER JOIN
ist am effektivsten, wenn du nur die sich überschneidenden Daten aus zwei Tabellen brauchst. Du kannst INNER JOIN
zum Beispiel verwenden, wenn du Verkaufsdaten analysierst, um Produkte zu finden, die verkauft wurden, z. B. wenn Produkt- und Verkaufstabellen übereinstimmende Einträge haben.
Wann sollte OUTER JOIN verwendet werden?
OUTER JOIN
ist geeignet, wenn du einen vollständigen Datensatz zurückgeben musst, einschließlich nicht übereinstimmender Zeilen. Zum Beispiel, wenn du einen Bericht erstellst, der alle Mitarbeiter, einschließlich derer ohne Abteilungszuordnung, oder alle Abteilungen, einschließlich derer ohne Mitarbeiter, anzeigt.
Fazit
Den Unterschied zwischen INNER JOIN
und OUTER JOIN
zu verstehen, ist wichtig, um effiziente Abfragen zu schreiben. Das Erlernen dieser Techniken hilft auch bei der Optimierung von Abfragen, um Daten schneller abrufen zu können. Ich möchte dich ermutigen, weiter zu üben, um mehr Fähigkeiten im Datenbankmanagement zu erlernen.
Ich empfehle, unseren Lernpfad zum Associate Data Analyst in SQL auszuprobieren, um ein guter Datenanalyst zu werden. In unserem Kurs Reporting in SQL lernst du außerdem, wie du komplexe Berichte und Dashboards für eine effektive Datenpräsentation erstellst. Wenn du dich auf ein Vorstellungsgespräch vorbereitest, bei dem du deine SQL-Kenntnisse unter Beweis stellen musst, empfehle ich dir unseren Blog, 20 Top SQL Joins Interview Questions, um dich auf das Gespräch vorzubereiten.
Erhalte eine Top-SQL-Zertifizierung
SQL INNER JOIN und OUTER JOIN FAQs
Was ist der Unterschied zwischen INNER JOIN und OUTER JOIN in SQL?
INNER JOIN liefert nur übereinstimmende Zeilen aus beiden Tabellen, während OUTER JOIN auch nicht übereinstimmende Zeilen enthält, wobei NULLs die Lücken füllen, wenn keine entsprechenden Daten gefunden werden.
Wann sollte ich einen INNER JOIN in SQL verwenden?
Verwende einen INNER JION, wenn du nur die Zeilen mit übereinstimmenden Werten in beiden Tabellen abrufen willst.
Was sind die OUTER JOIN-Typen in SQL?
Die OUTER JOIN-Typen sind LEFT OUTER JOIN, RIGHT OUTER JOIN und FULL OUTER JOIN.
Wie funktioniert ein LEFT OUTER JOIN in SQL?
Ein Left Outer Join liefert alle Zeilen aus der linken Tabelle, übereinstimmende Zeilen aus der rechten Tabelle und nicht übereinstimmende Zeilen aus der linken Tabelle.
Was ist ein FULL OUTER JOIN in SQL?
Ein FULL OUTER JOIN liefert alle Zeilen aus beiden Tabellen, einschließlich der nicht übereinstimmenden Zeilen aus beiden Tabellen.