SQLite
 sql >> Base de données >  >> RDS >> SQLite

Jointure SQLite

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.