Zusammenfassung :In diesem Tutorial lernen Sie verschiedene Arten von SQLite-Joins kennen, um Daten aus zwei oder mehr Tabellen abzufragen.
Für die Demonstration verwenden wir die artists
und albums
Tabellen aus der Beispieldatenbank.
Ein Künstler kann null oder viele Alben haben, während ein Album nur einem Künstler gehört.
Um Daten von beiden artists
abzufragen und albums
Tabellen, die Sie verwenden, können einen INNER JOIN
verwenden , LEFT JOIN
, oder CROSS JOIN
Klausel. Jede Join-Klausel bestimmt, wie SQLite Daten aus einer Tabelle verwendet, um sie mit Zeilen in einer anderen Tabelle abzugleichen.
Beachten Sie, dass SQLite den RIGHT JOIN
nicht direkt unterstützt und FULL OUTER JOIN
.
SQLite INNER JOIN
Die folgende Anweisung gibt die Albumtitel und ihre Künstlernamen zurück:
SELECT
Title,
Name
FROM
albums
INNER JOIN artists
ON artists.ArtistId = albums.ArtistId;
Code language: SQL (Structured Query Language) (sql)
Hier ist die Teilausgabe:
In diesem Beispiel der INNER JOIN
-Klausel stimmt mit jeder Zeile aus den albums
überein Tabelle mit jeder Zeile der artists
Tabelle basierend auf der Join-Bedingung (artists.ArtistId = albums.ArtistId
) angegeben nach dem ON
Schlüsselwort.
Wenn die Join-Bedingung wahr (oder 1) ist, werden die Spalten der Zeilen aus beiden albums
angezeigt und artists
Tabellen sind in der Ergebnismenge enthalten.
Diese Abfrage verwendet Tabellenaliase (l
für die albums
Tabelle und r
für artists
Tabelle), um die Abfrage zu verkürzen:
SELECT
l.Title,
r.Name
FROM
albums l
INNER JOIN artists r ON
r.ArtistId = l.ArtistId;
Code language: SQL (Structured Query Language) (sql)
Falls die Spaltennamen der verknüpften Tabellen gleich sind, z. B. ArtistId
, können Sie den USING
verwenden Syntax wie folgt:
SELECT
Title,
Name
FROM
albums
INNER JOIN artists USING(ArtistId);
Code language: SQL (Structured Query Language) (sql)
Die Klausel USING(ArtistId)
entspricht der Klausel ON artists.ArtistId = albums.ArtistId
.
SQLite LEFT JOIN
Diese Anweisung wählt die Künstlernamen und Albumtitel aus den artists
aus und albums
Tabellen mit dem LEFT JOIN
Klausel:
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums ON
artists.ArtistId = albums.ArtistId
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)
Hier ist die Ausgabe:
Der LEFT JOIN
-Klausel wählt Daten ab der linken Tabelle aus (artists
) und übereinstimmende Zeilen in der rechten Tabelle (albums
) basierend auf der Join-Bedingung (artists.ArtistId = albums.ArtistId
) .
Der linke Join gibt alle Zeilen der artists
zurück Tabelle (oder linke Tabelle) und die passenden Zeilen aus den albums
Tabelle (oder rechte Tabelle).
Wenn eine Zeile aus der linken Tabelle keine übereinstimmende Zeile in der rechten Tabelle hat, schließt SQLite Spalten der Zeilen in der linken Tabelle und NULL
ein für die Spalten der rechten Tabelle.
Ähnlich dem INNER JOIN
-Klausel können Sie den USING
verwenden Syntax für die Join-Bedingung wie folgt:
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums USING (ArtistId)
ORDER BY
Name;
Code language: SQL (Structured Query Language) (sql)
Wenn Sie Künstler finden möchten, die keine Alben haben, können Sie ein WHERE
hinzufügen -Klausel wie in der folgenden Abfrage gezeigt:
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums ON
artists.ArtistId = albums.ArtistId
WHERE Title IS NULL
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)
Dieses Bild zeigt die Teilausgabe:
Im Allgemeinen können Sie mit dieser Art von Abfrage Zeilen finden, die in der linken Tabelle verfügbar sind, aber keine entsprechenden Zeilen in der rechten Tabelle haben.
Beachten Sie, dass LEFT JOIN
und LEFT OUTER JOIN
sind Synonyme.
SQLite CROSS JOIN
Der CROSS JOIN
-Klausel erstellt ein kartesisches Produkt von Zeilen aus den verknüpften Tabellen.
Im Gegensatz zum INNER JOIN
und LEFT JOIN
Klauseln, ein CROSS JOIN
hat keine Join-Bedingung. Hier ist die grundlegende Syntax des CROSS JOIN
Klausel:
SELECT
select_list
FROM table1
CROSS JOIN table2;
Code language: SQL (Structured Query Language) (sql)
Der CROSS JOIN
kombiniert jede Zeile aus der ersten Tabelle (table1
) mit jeder Zeile aus der zweiten Tabelle (table2
), um die Ergebnismenge zu bilden.
Wenn die erste Tabelle N
hat Zeilen, die zweite Tabelle hat M
Zeilen hat das Endergebnis NxM
Zeilen.
Ein praktisches Beispiel für den CROSS JOIN
Klausel besteht darin, zwei Datensätze zu kombinieren, um einen Ausgangsdatensatz für die weitere Verarbeitung zu bilden. Sie haben beispielsweise eine Liste mit Produkten und Monaten und möchten einen Plan erstellen, wann Sie welche Produkte verkaufen können.
Das folgende Skript erstellt die products
und calendars
Tabellen:
CREATE TABLE products(
product text NOT null
);
INSERT INTO products(product)
VALUES('P1'),('P2'),('P3');
CREATE TABLE calendars(
y int NOT NULL,
m int NOT NULL
);
INSERT INTO calendars(y,m)
VALUES
(2019,1),
(2019,2),
(2019,3),
(2019,4),
(2019,5),
(2019,6),
(2019,7),
(2019,8),
(2019,9),
(2019,10),
(2019,11),
(2019,12);
Code language: SQL (Structured Query Language) (sql)
Diese Abfrage verwendet den CROSS JOIN
Klausel, um die Produkte mit den Monaten zu kombinieren:
SELECT *
FROM products
CROSS JOIN calendars;
Code language: SQL (Structured Query Language) (sql)
Hier ist die Ausgabe:
In diesem Tutorial haben Sie verschiedene Arten von SQLite-Joins kennengelernt, mit denen Sie Abfragen aus mehreren Tabellen durchführen können.