SQLite
 sql >> Datenbank >  >> RDS >> SQLite

SQLite-Join

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.