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.