sql >> Databáze >  >> RDS >> SQLite

Vnitřní spojení SQLite

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.

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:

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.

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

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

Vnitřní spojení SQLite – příklad 3 tabulek

Viz následující tabulky:tracks albums a artists

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

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

V tomto tutoriálu jste se naučili používat SQLite INNER JOIN klauzule k dotazování na data z více tabulek.


  1. Při instalaci pg (0.17.1) došlo k chybě a Bundler nemůže pokračovat

  2. Ověřování vašich záloh PostgreSQL na Dockeru

  3. Podpora více jazyků v 11i/R12

  4. Jak zacházet se sloupcem tabulky s názvem vyhrazeným klíčovým slovem SQL?