Samenvatting :in deze zelfstudie leert u over verschillende soorten SQLite-joins om gegevens uit twee of meer tabellen op te vragen.
Voor de demonstratie gebruiken we de artists
en albums
tabellen uit de voorbeelddatabase.
Een artiest kan nul of veel albums hebben, terwijl een album van één artiest is.
Gegevens opvragen van beide artists
en albums
tabellen, kunt u een INNER JOIN
. gebruiken , LEFT JOIN
, of CROSS JOIN
clausule. Elke join-clausule bepaalt hoe SQLite gegevens uit de ene tabel gebruikt om te matchen met rijen in een andere tabel.
Merk op dat SQLite de RIGHT JOIN
niet rechtstreeks ondersteunt en FULL OUTER JOIN
.
SQLite INNER JOIN
De volgende verklaring retourneert de albumtitels en hun artiestennamen:
SELECT
Title,
Name
FROM
albums
INNER JOIN artists
ON artists.ArtistId = albums.ArtistId;
Code language: SQL (Structured Query Language) (sql)
Hier is de gedeeltelijke output:
In dit voorbeeld is de INNER JOIN
clausule komt overeen met elke rij uit de albums
tabel met elke rij van de artists
tabel op basis van de deelnamevoorwaarde (artists.ArtistId = albums.ArtistId
) opgegeven na de ON
zoekwoord.
Als de join-voorwaarde true (of 1) is, worden de kolommen met rijen van beide albums
en artists
tabellen zijn opgenomen in de resultatenset.
Deze query gebruikt tabelaliassen (l
voor de albums
tabel en r
voor artists
tabel) om de zoekopdracht in te korten:
SELECT
l.Title,
r.Name
FROM
albums l
INNER JOIN artists r ON
r.ArtistId = l.ArtistId;
Code language: SQL (Structured Query Language) (sql)
Als de kolomnamen van gekoppelde tabellen hetzelfde zijn, bijvoorbeeld ArtistId
, kunt u de USING
syntaxis als volgt:
SELECT
Title,
Name
FROM
albums
INNER JOIN artists USING(ArtistId);
Code language: SQL (Structured Query Language) (sql)
De clausule USING(ArtistId)
komt overeen met de clausule ON artists.ArtistId = albums.ArtistId
.
SQLite LEFT JOIN
Deze verklaring selecteert de artiestennamen en albumtitels van de artists
en albums
tabellen met de LEFT JOIN
clausule:
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums ON
artists.ArtistId = albums.ArtistId
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)
Hier is de uitvoer:
De LEFT JOIN
clausule selecteert gegevens vanaf de linkertabel (artists
) en overeenkomende rijen in de rechtertabel (albums
) op basis van de deelnamevoorwaarde (artists.ArtistId = albums.ArtistId
) .
De linker join retourneert alle rijen van de artists
tabel (of linkertabel) en de overeenkomende rijen uit de albums
tafel (of rechter tafel).
Als een rij uit de linkertabel geen overeenkomende rij in de rechtertabel heeft, bevat SQLite kolommen van de rijen in de linkertabel en NULL
voor de kolommen van de rechtertabel.
Gelijk aan de INNER JOIN
clausule, kunt u de USING
syntaxis voor de join-voorwaarde als volgt:
SELECT
Name,
Title
FROM
artists
LEFT JOIN albums USING (ArtistId)
ORDER BY
Name;
Code language: SQL (Structured Query Language) (sql)
Als je artiesten wilt vinden die geen albums hebben, kun je een WHERE
. toevoegen clausule zoals getoond in de volgende vraag:
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)
Deze foto toont de gedeeltelijke output:
Over het algemeen kunt u met dit type zoekopdracht rijen vinden die beschikbaar zijn in de linkertabel, maar geen overeenkomstige rijen in de rechtertabel hebben.
Merk op dat LEFT JOIN
en LEFT OUTER JOIN
zijn synoniemen.
SQLite CROSS JOIN
De CROSS JOIN
clausule maakt een Cartesiaans product van rijen uit de samengevoegde tabellen.
In tegenstelling tot de INNER JOIN
en LEFT JOIN
clausules, een CROSS JOIN
heeft geen lidmaatschapsvoorwaarde. Hier is de basissyntaxis van de CROSS JOIN
clausule:
SELECT
select_list
FROM table1
CROSS JOIN table2;
Code language: SQL (Structured Query Language) (sql)
De CROSS JOIN
combineert elke rij uit de eerste tabel (table1
) met elke rij uit de tweede tabel (table2
) om de resultatenset te vormen.
Als de eerste tabel N
. heeft rijen, de tweede tabel heeft M
rijen, zal het eindresultaat NxM
. hebben rijen.
Een praktisch voorbeeld van de CROSS JOIN
clausule is om twee sets gegevens te combineren voor het vormen van een eerste gegevensset voor verdere verwerking. U heeft bijvoorbeeld een lijst met producten en maanden, en u wilt een plan maken wanneer u welke producten kunt verkopen.
Het volgende script maakt de products
en 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)
Deze zoekopdracht gebruikt de CROSS JOIN
clausule om de producten te combineren met de maanden:
SELECT *
FROM products
CROSS JOIN calendars;
Code language: SQL (Structured Query Language) (sql)
Hier is de uitvoer:
In deze zelfstudie hebt u verschillende soorten SQLite-joins geleerd waarmee u query's kunt uitvoeren vanuit meerdere tabellen.