Shrnutí :tento tutoriál vám ukáže, jak používat klauzuli vnitřního spojení SQLite k dotazování na data z více tabulek.
Úvod do klauzule vnitřního spojení SQLite
V relačních databázích jsou data často distribuována v mnoha souvisejících tabulkách. Tabulka je spojena s jinou tabulkou pomocí cizích klíčů.
K dotazování na data z více tabulek použijte INNER JOIN
doložka. INNER JOIN
klauzule kombinuje sloupce z korelovaných tabulek.
Předpokládejme, že máte dvě tabulky:A a B.
A má sloupce a1, a2 af. B má sloupec b1, b2 a f. Tabulka A se propojuje s tabulkou B pomocí sloupce cizího klíče s názvem f.
Následující text ilustruje syntaxi klauzule vnitřního spojení:
SELECT a1, a2, b1, b2
FROM A
INNER JOIN B on B.f = A.f;
Code language: SQL (Structured Query Language) (sql)
Pro každý řádek v tabulce A INNER JOIN
klauzule porovnává hodnotu sloupce f s hodnotou sloupce f v tabulce B. Pokud se hodnota sloupce f v tabulce A rovná hodnotě sloupce f v tabulce B, spojí data ze sloupců a1, a2, b1, b2 a zahrne tento řádek do sady výsledků.
Jinými slovy, INNER JOIN
klauzule vrátí řádky z tabulky A, která má odpovídající řádek v tabulce B.
Tato logika se použije, pokud spojíte více než 2 tabulky.
Viz následující příklad.
![](http://www.sqldat.com/article/uploadfiles/202205/2022051314214731.png)
Do sady výsledků jsou zahrnuty pouze řádky v tabulce A:(a1,1), (a3,3) mají odpovídající řádky v tabulce B (b1,1), (b2,3).
Následující diagram znázorňuje INNER JOIN
klauzule:
![](http://www.sqldat.com/article/uploadfiles/202205/2022051314214787.png)
SQLite INNER JOIN
příklady
Pojďme se podívat na tracks
a albums
tabulky ve vzorové databázi. tracks
tabulka odkazuje na albums
tabulky pomocí AlbumId
sloupec.
![](http://www.sqldat.com/article/uploadfiles/202205/2022051314214725.png)
Ve tracks
tabulka AlbumId
sloupec je cizí klíč. A v albums
tabulka AlbumId
je primární klíč.
Chcete-li dotazovat data z obou tracks
a albums
tabulky, použijete následující příkaz:
SELECT
trackid,
name,
title
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
![](http://www.sqldat.com/article/uploadfiles/202205/2022051314214718.jpg)
Pro každý řádek v tabulce stop používá SQLite hodnotu v albumid
ve sloupci tracks
tabulku pro porovnání s hodnotou v albumid
z albums
stůl. Pokud SQLite najde shodu, zkombinuje data řádků v obou tabulkách ve výsledné sadě.
Můžete zahrnout AlbumId
sloupců z obou tabulek v konečné sadě výsledků, abyste viděli efekt.
SELECT
trackid,
name,
tracks.albumid AS album_id_tracks,
albums.albumid AS album_id_albums,
title
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
![](http://www.sqldat.com/article/uploadfiles/202205/2022051314214758.jpg)
Vnitřní spojení SQLite – příklad 3 tabulek
Viz následující tabulky:tracks
albums
a artists
![](http://www.sqldat.com/article/uploadfiles/202205/2022051314214704.png)
Jedna skladba patří k jednomu albu a jedno album má mnoho skladeb. tracks
tabulka spojená s albums
tabulky přes albumid
sloupec.
Jedno album patří jednomu interpretovi a jeden interpret má jedno nebo více alb. albums
tabulka odkazuje na artists
tabulky přes artistid
sloupec.
Chcete-li se dotazovat na data z těchto tabulek, musíte použít dvě klauzule vnitřního spojení v SELECT
prohlášení takto:
SELECT
trackid,
tracks.name AS track,
albums.title AS album,
artists.name AS artist
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
INNER JOIN artists ON artists.artistid = albums.artistid;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
![](http://www.sqldat.com/article/uploadfiles/202205/2022051314214722.jpg)
K získání skladeb a alb interpreta s ID 10 můžete použít klauzuli WHERE jako následující prohlášení:
SELECT
trackid,
tracks.name AS Track,
albums.title AS Album,
artists.name AS Artist
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
INNER JOIN artists ON artists.artistid = albums.artistid
WHERE
artists.artistid = 10;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
![](http://www.sqldat.com/article/uploadfiles/202205/2022051314214719.jpg)
V tomto tutoriálu jste se naučili používat SQLite INNER JOIN
klauzule k dotazování na data z více tabulek.