Résumé :dans ce didacticiel, vous découvrirez différents types de jointures SQLite pour interroger les données de deux tables ou plus.
Pour la démonstration, nous utiliserons les artists
et albums
tables de l'exemple de base de données.
Un artiste peut avoir zéro ou plusieurs albums alors qu'un album appartient à un artiste.
Pour interroger les données des deux artists
et albums
tables, vous pouvez utiliser un INNER JOIN
, LEFT JOIN
, ou CROSS JOIN
clause. Chaque clause de jointure détermine comment SQLite utilise les données d'une table pour faire correspondre les lignes d'une autre table.
Notez que SQLite ne prend pas directement en charge le RIGHT JOIN
et FULL OUTER JOIN
.
SQLite INNER JOIN
L'instruction suivante renvoie les titres des albums et leurs noms d'artiste :
SELECT
Title,
Name
FROM
albums
INNER JOIN artists
ON artists.ArtistId = albums.ArtistId;
Code language: SQL (Structured Query Language) (sql)
Voici la sortie partielle :
Dans cet exemple, le INNER JOIN
la clause correspond à chaque ligne des albums
tableau avec chaque ligne des artists
table basée sur la condition de jointure (artists.ArtistId = albums.ArtistId
) spécifié après le ON
mot-clé.
Si la condition de jointure est vraie (ou 1), les colonnes de lignes des deux albums
et artists
les tables sont incluses dans le jeu de résultats.
Cette requête utilise des alias de table (l
pour les albums
table et r
pour les artists
table) pour raccourcir la requête :
SELECT
l.Title,
r.Name
FROM
albums l
INNER JOIN artists r ON
r.ArtistId = l.ArtistId;
Code language: SQL (Structured Query Language) (sql)
Dans le cas où les noms de colonne des tables jointes sont les mêmes, par exemple, ArtistId
, vous pouvez utiliser le USING
syntaxe comme suit :
SELECT
Title,
Name
FROM
albums
INNER JOIN artists USING(ArtistId);
Code language: SQL (Structured Query Language) (sql)
La clause USING(ArtistId)
est équivalent à la clause ON artists.ArtistId = albums.ArtistId
.
SQLite LEFT JOIN
Cette instruction sélectionne les noms d'artistes et les titres d'albums parmi les artists
et albums
tables en utilisant le LEFT JOIN
clause :
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums ON
artists.ArtistId = albums.ArtistId
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)
Voici le résultat :
Le LEFT JOIN
la clause sélectionne les données à partir de la table de gauche (artists
) et les lignes correspondantes dans le tableau de droite (albums
) en fonction de la condition de jointure (artists.ArtistId = albums.ArtistId
) .
La jointure gauche renvoie toutes les lignes des artists
tableau (ou tableau de gauche) et les lignes correspondantes des albums
table (ou table de droite).
Si une ligne de la table de gauche n'a pas de ligne correspondante dans la table de droite, SQLite inclut les colonnes des lignes de la table de gauche et NULL
pour les colonnes du tableau de droite.
Similaire à la INNER JOIN
clause, vous pouvez utiliser la clause USING
syntaxe pour la condition de jointure comme suit :
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums USING (ArtistId)
ORDER BY
Name;
Code language: SQL (Structured Query Language) (sql)
Si vous voulez trouver des artistes qui n'ont pas d'albums, vous pouvez ajouter un WHERE
clause comme indiqué dans la requête suivante :
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)
Cette image montre la sortie partielle :
Généralement, ce type de requête vous permet de rechercher des lignes disponibles dans le tableau de gauche mais qui n'ont pas de lignes correspondantes dans le tableau de droite.
Notez que LEFT JOIN
et LEFT OUTER JOIN
sont des synonymes.
SQLite CROSS JOIN
Le CROSS JOIN
La clause crée un produit cartésien des lignes des tables jointes.
Contrairement au INNER JOIN
et LEFT JOIN
clauses, un CROSS JOIN
n'a pas de condition de jointure. Voici la syntaxe de base du CROSS JOIN
clause :
SELECT
select_list
FROM table1
CROSS JOIN table2;
Code language: SQL (Structured Query Language) (sql)
Le CROSS JOIN
combine chaque ligne de la première table (table1
) avec chaque ligne de la deuxième table (table2
) pour former le jeu de résultats.
Si la première table a N
lignes, la deuxième table a M
lignes, le résultat final aura NxM
lignes.
Un exemple pratique du CROSS JOIN
La clause consiste à combiner deux ensembles de données pour former un ensemble de données initial pour un traitement ultérieur. Par exemple, vous avez une liste de produits et de mois, et vous souhaitez planifier quand vous pouvez vendre quels produits.
Le script suivant crée les products
et calendars
tableaux :
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)
Cette requête utilise le CROSS JOIN
clause pour combiner les produits avec les mois :
SELECT *
FROM products
CROSS JOIN calendars;
Code language: SQL (Structured Query Language) (sql)
Voici le résultat :
Dans ce didacticiel, vous avez appris différents types de jointures SQLite qui vous permettent d'interroger plusieurs tables.