SQLite Join

DieJOIN-Klausel von SQLite wird verwendet, um Datensätze aus Tabellen in zwei oder mehr Datenbanken zu kombinieren. JOIN ist ein Mittel, um Felder aus zwei Tabellen mithilfe gemeinsamer Werte zu kombinieren.

SQL definiert drei Haupttypen von Joins:

  • Cross Join - CROSS JOIN

  • Inner Join - INNER JOIN

  • Outer Join - OUTER JOIN

Bevor wir fortfahren, nehmen wir an, dass es zwei Tabellen gibt, COMPANY und DEPARTMENT. Wir haben bereits die INSERT-Anweisungen gesehen, mit denen die Tabelle COMPANY gefüllt wurde. Nehmen wir nun an, dass die Liste der Datensätze in der Tabelle COMPANY wie folgt lautet:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0

Die andere Tabelle ist DEPARTMENT, definiert wie folgt:

CREATE TABLE DEPARTMENT(
   ID INT PRIMARY KEY      NOT NULL,
   DEPT           CHAR(50) NOT NULL,
   EMP_ID         INT      NOT NULL
);

Im Folgenden sind die INSERT-Anweisungen zum Füllen der Tabelle DEPARTMENT aufgeführt:

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (1, 'IT Billing', 1 );

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (2, 'Engineering', 2 );

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (3, 'Finance', 7 );

Schließlich haben wir die folgende Liste von Datensätzen in der Tabelle DEPARTMENT:

ID          DEPT        EMP_ID
----------  ----------  ----------
1           IT Billing  1
2           Engineerin  2
3           Finance     7

Cross Join - CROSS JOIN

Ein CROSS JOIN verknüpft jede Zeile der ersten Tabelle mit jeder Zeile der zweiten Tabelle. Wenn die beiden Eingabetabellen x bzw. y Zeilen haben, hat die Ergebnistabelle x*y Zeilen. Da CROSS JOIN potenziell sehr große Tabellen erzeugen kann, muss es mit Vorsicht verwendet werden, und zwar nur, wenn es angebracht ist.

Die Operation eines Cross Joins gibt das kartesische Produkt aller Datenzeilen aus den beiden verknüpften Tabellen zurück. Die Anzahl der zurückgegebenen Datenzeilen entspricht der Anzahl der Datenzeilen in der ersten Tabelle, die die Abfragebedingungen erfüllen, multipliziert mit der Anzahl der Datenzeilen in der zweiten Tabelle, die die Abfragebedingungen erfüllen.

Nachfolgend finden Sie die Syntax für CROSS JOIN:

SELECT ... FROM table1 CROSS JOIN table2 ...

Basierend auf den obigen Tabellen können wir einen CROSS JOIN wie folgt schreiben:

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;

Die obige Abfrage erzeugt das folgende Ergebnis:

EMP_ID      NAME        DEPT
----------  ----------  ----------
1           Paul        IT Billing
2           Paul        Engineerin
7           Paul        Finance
1           Allen       IT Billing
2           Allen       Engineerin
7           Allen       Finance
1           Teddy       IT Billing
2           Teddy       Engineerin
7           Teddy       Finance
1           Mark        IT Billing
2           Mark        Engineerin
7           Mark        Finance
1           David       IT Billing
2           David       Engineerin
7           David       Finance
1           Kim         IT Billing
2           Kim         Engineerin
7           Kim         Finance
1           James       IT Billing
2           James       Engineerin
7           James       Finance

Inner Join - INNER JOIN

INNER JOIN erstellt eine neue Ergebnistabelle, indem die Spaltenwerte zweier Tabellen (table1 und table2) auf Grundlage des Join-Prädikats kombiniert werden. Die Abfrage vergleicht jede Zeile in table1 mit jeder Zeile in table2 und findet alle übereinstimmenden Zeilenpaare, die das Join-Prädikat erfüllen. Wenn das Join-Prädikat erfüllt ist, werden die Spaltenwerte jedes übereinstimmenden Zeilenpaars A und B zu einer Ergebniszeile kombiniert.

INNER JOIN ist der häufigste Join-Typ und der Standard-Join-Typ. Das Schlüsselwort INNER ist optional.

Nachfolgend finden Sie die Syntax für INNER JOIN:

SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ...

Um Redundanz zu vermeiden und die Formulierung kürzer zu halten, können Sie denUSING-Ausdruck verwenden, um die INNER JOIN-Bedingung anzugeben. Dieser Ausdruck gibt eine Liste mit einer oder mehreren Spalten an:

SELECT ... FROM table1 JOIN table2 USING ( column1 ,... ) ...

NATURAL JOIN ist ähnlich wieJOIN...USING, außer dass es automatisch auf Gleichheit zwischen Werten in jeder Spalte prüft, die in beiden Tabellen vorhanden ist:

SELECT ... FROM table1 NATURAL JOIN table2...

Basierend auf den obigen Tabellen können wir einen INNER JOIN wie folgt schreiben:

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
        ON COMPANY.ID = DEPARTMENT.EMP_ID;

Die obige Abfrage erzeugt das folgende Ergebnis:

EMP_ID      NAME        DEPT
----------  ----------  ----------
1           Paul        IT Billing
2           Allen       Engineerin
7           James       Finance

Outer Join - OUTER JOIN

OUTER JOIN ist eine Erweiterung von INNER JOIN. Obwohl der SQL-Standard drei Arten von Outer Joins definiert: LEFT, RIGHT und FULL, unterstützt SQLite nurLEFT OUTER JOIN。

Die Art und Weise, wie OUTER JOIN Bedingungen angibt, ist dieselbe wie bei INNER JOIN, wobei die Schlüsselwörter ON, USING oder NATURAL verwendet werden. Die anfängliche Ergebnistabelle wird auf dieselbe Weise berechnet. Sobald die primäre Join-Berechnung abgeschlossen ist, fügt OUTER JOIN alle nicht verbundenen Zeilen aus einer oder beiden Tabellen zusammen, verwendet NULL-Werte für die Outer-Join-Spalten und hängt sie an die Ergebnistabelle an.

Nachfolgend finden Sie die Syntax für LEFT OUTER JOIN:

SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...

Um Redundanz zu vermeiden und die Formulierung kürzer zu halten, können Sie denUSING-Ausdruck verwenden, um die OUTER JOIN-Bedingung zu deklarieren. Dieser Ausdruck gibt eine Liste mit einer oder mehreren Spalten an:

SELECT ... FROM table1 LEFT OUTER JOIN table2 USING ( column1 ,... ) ...

Basierend auf den obigen Tabellen können wir einen OUTER JOIN wie folgt schreiben:

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
        ON COMPANY.ID = DEPARTMENT.EMP_ID;

Die obige Abfrage erzeugt das folgende Ergebnis:

EMP_ID      NAME        DEPT
----------  ----------  ----------
1           Paul        IT Billing
2           Allen       Engineerin
            Teddy
            Mark
            David
            Kim
7           James       Finance
Weitere Erweiterungen