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