close

Beitreten (SQL)

Zur Navigation springen Zur Suche springen

Das JOINist eine Klausel der SQL -Sprache , die verwendet wird, um die Tupel von zwei oder mehr Relationen einer Datenbank zu kombinieren . Der ANSI -Standard definiert einige Spezifikationen für die SQL-Sprache über die auszuführenden Typen JOIN:,, INNERund , FULLzu denen verschiedene DBMSs hinzufügen . In einigen Fällen ist es möglich, dass eine Tabelle mit sich selbst kombiniert werden kann, in diesem Fall sprechen wir von Selbstverknüpfung . LEFTRIGHTCROSS

Beispieltabellen

Alle nachstehenden Beispiele verwenden die folgenden zwei Tabellen

Mitarbeitertisch
Nachname Abteilungs-ID
Rossi 31
Weiße 33
Mancini 33
Santoro 34
Monti 34
Fett Null
Tabelle der Abteilungen
Abteilungs-ID Abteilungsname
31 Verkauf
33 Techniker
34 Humanressourcen
35 Förderung

Dipartimenti.ID_dipartimentoist der Primärschlüssel, der eine 0: n-Kardinalität gegenüber dem Feld hatImpiegati.ID_dipartimento

Hinweis: Die Abteilung „Beförderung“ in der Tabelle „Abteilungen“ hat keine Entsprechung in der Tabelle „Mitarbeiter“. Während der Mitarbeiter „Grassi“ keiner Abteilung zugeordnet ist ( Null).

Inner Join

Ein Inner Join erstellt eine neue Tabelle, indem die Werte der beiden Ausgangstabellen (A und B) basierend auf einer bestimmten Vergleichsregel kombiniert werden. Die Abfrage vergleicht jede Zeile von Tabelle A mit jeder Zeile von Tabelle B und versucht, die definierte Sortierung zu erfüllen. Wenn die Join-Regel erfüllt ist, werden die Werte aller Spalten in den Tabellen A und B beim Aufbau der resultierenden Tabelle zu einer einzigen Zeile kombiniert. Innere Verknüpfung ist die am häufigsten verwendete Form der Verknüpfung in Anwendungen und der Standardmodus.

Die folgende Abfrage verbindet beispielsweise die beiden Tabellen „ Employees “ und „ Departments “ mit dem Primärschlüssel „ department_ID “ , der die Spalte in beiden Tabellen darstellt. Wenn die department_ID in beiden Tabellen übereinstimmt (d. h. die Regel erfüllt ist), kombiniert die Abfrage die Spalten Last Name , Department_ID und Department_Name in einer einzigen Zeile für die resultierende Tabelle.

Inner-Join-Beispiel in expliziter Form:

SELECT  * 
FROM    Mitarbeiter  
       INNER  JOIN  Abteilungen  
          ON  Mitarbeiter . Department_ID  =  Abteilungen . Abteilungs-ID

was äquivalent ist zu:

SELECT  *   
FROM    Mitarbeiter ,  Abteilungen  
WO   Mitarbeiter . Department_ID  =  Abteilungen . Abteilungs-ID

Ergebnis der Inner Join-Abfrage:

Nachname der Mitarbeiter Mitarbeiter.Abteilungs-ID Abteilungen.Abteilungsname Abteilungen.Abteilungs-ID
Santoro 34 Humanressourcen 34
Weiße 33 Techniker 33
Monti 34 Humanressourcen 34
Mancini 33 Techniker 33
Rossi 31 Verkauf 31

Beachten Sie , dass der "Grassi"-Mitarbeiter und die Abteilung "Werbung" nicht anwesend sind, da der Grassi-Mitarbeiter eine NullWeile lang keine Beförderung in einem Mitarbeiter hat. Manchmal möchten Sie als Endergebnis auch Datensätze haben, die nicht übereinstimmen: In diesem Fall können Sie die Abfrage vom Typ Outer Join verwenden.

Equi-join

Equi - Join , auch bekannt als Equijoin , hat einen bestimmten Komparatortyp namens Theta Join , der nur mathematische Gleichheit als Vergleichsregel als Überprüfungsmethode verwendet. Die Verwendung anderer Vergleichsoperatoren (z. B. <) disqualifiziert den Join als Equi-Join. Die folgende Abfrage verwendet einen Equi-Join:

SELECT  * 
FROM    Mitarbeiter  
       INNER  JOIN  Abteilungen  
          ON  Mitarbeiter . Department_ID  =  Abteilungen . Abteilungs-ID

SQL bietet eine Abkürzung zum Definieren von Equi-Joins über das SchlüsselwortUSING

SELECT  * 
FROM    Mitarbeiter  
       INNER  JOIN  Abteilungen  
          USING  ( Department_ID )

Das Schlüsselwort USINGwird von Microsoft SQL Server Management Studio, MySQL, Oracle, PostgreSQL, SQLite und DB2/400 unterstützt.

Natürlicher Join

Ein natürlicher Join bietet zusätzliche Equi-Join-Spezialisierungen. Normalerweise vergleicht der Join Spalten aus verschiedenen Tabellen, die denselben Namen haben. Natural Join macht genau das.

Das folgende Beispiel zeigt die natürliche Join-Notation, die dem ersten definierten Inner-Join entspricht:

SELECT  * 
FROM    Mitarbeiter  NATURAL  JOIN  Abteilungen
Abteilungs-ID Nachname der Mitarbeiter Abteilungen.Abteilungsname
34 Monti Humanressourcen
33 Weiße Techniker
34 Santoro Humanressourcen
33 Mancini Techniker
31 Rossi Verkauf

Kreuzverknüpfung

Ein Cross Join , ein kartesischer Join oder ein Produkt stellt die Grundlage (die IT-Infrastruktur) bereit, durch die alle Arten von Inner Joins funktionieren. Das Ergebnis eines Cross Joins ist das kartesische Produkt aller Zeilen der Tabellen, die zur Join-Abfrage beitragen. Es ist, als würde man sagen, dass wir eine innere Verknüpfung durchführen, ohne die Kollatierung festzulegen, oder dass die Kollatierung immer wahr zurückgibt.

Angesichts der beiden Starttabellen A und B wird der Cross Join A × B geschrieben.

Beispiel für einen expliziten Cross Join:

SELECT  * 
FROM    Mitarbeiter  CROSS  JOIN  Abteilungen

Ein weiteres implizites Beispiel für einen Cross Join:

SELECT  * 
FROM    Mitarbeiter ,  Abteilungen ;
Nachname der Mitarbeiter Mitarbeiter.Abteilungs-ID Abteilungen.Abteilungsname Abteilungen.Abteilungs-ID
Rossi 31 Verkauf 31
Weiße 33 Verkauf 31
Mancini 33 Verkauf 31
Monti 34 Verkauf 31
Santoro 34 Verkauf 31
Fett Null Verkauf 31
Rossi 31 Techniker 33
Weiße 33 Techniker 33
Mancini 33 Techniker 33
Monti 34 Techniker 33
Santoro 34 Techniker 33
Fett Null Techniker 33
Rossi 31 Humanressourcen 34
Weiße 33 Humanressourcen 34
Mancini 33 Humanressourcen 34
Monti 34 Humanressourcen 34
Santoro 34 Humanressourcen 34
Fett Null Humanressourcen 34
Rossi 31 Förderung 35
Weiße 33 Förderung 35
Mancini 33 Förderung 35
Monti 34 Förderung 35
Santoro 34 Förderung 35
Fett Null Förderung 35

Äußerer Join

Ein Outer Join erfordert keine exakte Übereinstimmung zwischen den Zeilen zweier Tabellen. Die aus einem Outer Join resultierende Tabelle enthält alle Datensätze, die keine Entsprechung zwischen den Tabellen haben. Outer Joins werden in Left Outer Joins , Right Outer Joins und Full Outer Joins unterteilt , je nachdem, für welche Tabelle wir Werte für den Fall einer Sortierungsabweichung von (links, rechts oder beides) speichern möchten.

( Links (links) und rechts (rechts) beziehen sich in diesem Fall auf die beiden Seiten des Schlüsselworts JOIN.)

HINWEIS zu WHERE- und ON-Klauseln:

Es wird betont, dass es eine Ausführungsreihenfolge zwischen den im WHERE angegebenen Bedingungen und denen im ON gibt.

Insbesondere werden die Klauseln in ON vor der Ausführung der Verknüpfung ausgewertet, während die Klauseln in where nach der Ausführung der Verknüpfung ausgewertet werden.

Left Outer Join

Das Ergebnis einer Left-Outer-Join -Abfrage (oder einfach Left-Join -Abfrage) für die Tabellen A und B enthält immer alle Datensätze der linken Tabelle ("links") A, während sie aus der Tabelle rechts ("rechts") extrahiert werden. B nur die Zeilen, die in der Sortierung des Joins übereinstimmen. Das bedeutet, wenn die Klausel ON0 (Null) Zeilen in B findet, zeigt der Join eine resultierende Zeile mit NULL-Wert in allen Spalten, die mit dem Ergebnis für die Spalten von B übereinstimmen.

Beispiel für einen Left Outer Join:

SELECT  *   
FROM    Mitarbeiter   LEFT  OUTER  JOIN  Abteilungen   
          ON  Mitarbeiter . Department_ID  =  Abteilungen . Abteilungs-ID
Nachname der Mitarbeiter Mitarbeiter.Abteilungs-ID Abteilungen.Abteilungsname Abteilungen.Abteilungs-ID
Weiße 33 Techniker 33
Rossi 31 Verkauf 31
Santoro 34 Humanressourcen 34
Monti 34 Humanressourcen 34
Fett Null Null Null
Mancini 33 Techniker 33

Right Outer Join

Ein rechter äußerer Join (oder rechter Join ) folgt einfach der Operation des linken äußeren Joins, kehrt jedoch die Reihenfolge der betroffenen Tabellen um.

Das Ergebnis einer Right-Outer-Join - Abfrage für die Tabellen A und B enthält immer alle Datensätze der rechten Tabelle („rechts“) B, während aus der linken Tabelle („links“) A nur die Zeilen extrahiert werden, die in der Tabelle übereinstimmen - Sortierung des Joins. Das bedeutet, wenn die Klausel ON0 (Null) Zeilen in A findet, zeigt der Join eine resultierende Zeile mit NULL-Wert in allen Spalten, die mit dem Ergebnis für die Spalten von A übereinstimmen.

Beispiel für einen Right Outer Join:

SELECT  *  
FROM    Mitarbeiter  RIGHT  OUTER  JOIN  Abteilungen  
          ON  Mitarbeiter . Department_ID  =  Abteilungen . Abteilungs-ID
Nachname der Mitarbeiter Mitarbeiter.Abteilungs-ID Abteilungen.Abteilungsname Abteilungen.Abteilungs-ID
Monti 34 Humanressourcen 34
Weiße 33 Techniker 33
Santoro 34 Humanressourcen 34
Mancini 33 Techniker 33
Rossi 31 Verkauf 31
Null Null Förderung 35

In der Praxis werden Left-Outer-Join-Abfragen häufiger verwendet als Right-Outer-Join-Abfragen, aber es kann seltene Fälle geben, in denen sehr komplexe Abfragen gleichzeitig die Left-Outer-Join- und Right-Outer-Join-Kriterien verwenden müssen.

Das gleiche Ergebnis des vorherigen Right Outer Joins kann mit dem Left Outer Join-Typ wiederholt werden:

SELECT  *  
FROM    Abteilungen  LEFT  OUTER  JOIN  Mitarbeiter 
          ON  Mitarbeiter . Department_ID  =  Abteilungen . Abteilungs-ID

Vollständiger äußerer Join

Ein Full Outer Join kombiniert die Ergebnisse der beiden Tabellen A und B unter Berücksichtigung aller Zeilen der Tabellen, auch derer, die einander nicht entsprechen.

Das Ergebnis einer vollständigen Outer-Join - Abfrage für die Tabellen A und B enthält immer alle Datensätze der linken Tabelle ("links") A, wobei aus der rechten Tabelle ("rechts") B nur die Zeilen extrahiert werden, die der Join-Vergleichsregel entsprechen ; Außerdem werden alle Datensätze der linken Tabelle ("links") A, die in der rechten Tabelle ("rechts") B nicht übereinstimmen, extrahiert, indem die Werte aller Spalten der Tabelle B und auf NULL gesetzt werden alle Datensätze der rechten Tabelle ("rechts") B, die in der linken Tabelle ("links") A nicht übereinstimmen, indem die Werte aller Spalten der Tabelle A auf NULL gesetzt werden.

Beispiel für einen Full Outer Join:

SELECT  *   
FROM    Mitarbeiter  
       FULL  OUTER  JOIN  Abteilungen  
          ON  Mitarbeiter . Department_ID  =  Abteilungen . Abteilungs-ID
Nachname der Mitarbeiter Mitarbeiter.Abteilungs-ID Abteilungen.Abteilungsname Abteilungen.Abteilungs-ID
Monti 34 Humanressourcen 34
Weiße 33 Techniker 33
Santoro 34 Humanressourcen 34
Fett Null Null Null
Mancini 33 Techniker 33
Rossi 31 Verkauf 31
Null Null Förderung 35

Einige Datenbanken (z. B. MySQL) unterstützen diese Funktionalität nicht direkt, aber sie kann durch die Kombination von linken und rechten äußeren Verknüpfungen mithilfe des Schlüsselworts union emuliert werden .

Das Erstellen einer vollständigen Outer-Join-Abfrage erfolgt wie folgt:

SELECT  * 
FROM    Mitarbeiter  
       LEFT  JOIN  Abteilungen  
          ON  Mitarbeiter . Department_ID  =  Abteilungen . Department_ID 
UNION 
SELECT  * 
FROM    Mitarbeiter 
       RIGHT  JOIN  Departments 
          ON  Mitarbeiter . Department_ID  =  Abteilungen . Department_ID 
WO   Mitarbeiter . Department_ID  IST  NULL

Ebenso ohne die rechte Outer-Join-Abfrage zu verwenden:

AUSWAHL  Mitarbeiter . * ,  Abteilungen . * 
FROM    Mitarbeiter  
       LEFT  JOIN  Abteilungen  
          ON  Mitarbeiter . Department_ID  =  Abteilungen . Department_ID 
UNION 
SELECT  Mitarbeiter . * ,  Abteilungen . * 
AUS    Abteilungen 
       LEFT  JOIN  Mitarbeiter 
          ON  Mitarbeiter . Department_ID  =  Abteilungen . Department_ID 
WO   Mitarbeiter . Department_ID  IST  NULL

Selbst beitreten

Self-Join wird verwendet, um eine Tabelle mit sich selbst zu verbinden.

Verwandte Artikel

Externe Links

  • Einführung in JOINs in der AskMonty-Wissensdatenbank