SQLite - inner JOIN
INNER JOIN
本教程向您展示如何使用SQLite 的内连接来在多表中查询数据。
SQLite inner join介绍
在关系数据库中,数据通常分布在许多相关表中。一个表使用外键与另一个表相关联。
要从多个表中查询数据,请使用 INNER JOIN 子句。INNER JOIN 子句将来自相关表的列组合在一起。
假设你有两个表: A 和B。
A表有a1,a2和f列。 B表有b1, b2和f列。 A表和B表使用f列进行关联。 以下说明了内连接语句的语法:
SELECT a1, a2, b1, b2
FROM A
INNER JOIN B on B.f = A.f;
对于 A 表中的每一行,INNER JOIN 子句将 f 列的值与 B 表中的 f 列的值进行比较。如果 A 表中的 f 列的值等于 B 表中的 f 列的值,则它将 a1、a2、b1、b2 列中的数据组合起来并将该行包含在结果集中。
换句话说,INNER JOIN 子句返回 A 表中在 B 表中具有相应行的行。
如果您连接 2 个以上的表,则应用此逻辑。
看下面的例子:

只有A表中的行:(a1,1)、(a3,3)有B表中对应行(b1,1)、(b2,3)才包含在结果集中。
下图说明了INNER JOIN子句的关系:

SQLite INNER JOIN 例子

在曲目tracks表中,AlbumId 列是外键。而在专辑albums表中,AlbumId 是主键。
为了能在tracks和albums表中查询数据,你可以使用以下语句。
SELECT
trackid,
name,
title
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid;

对于 tracks 表中的每一行,SQLite 使用 tracks 表中 albumid 列中的值与 albums 表中 albumid 中的值进行比较。如果 SQLite 找到匹配项,它会将两个表中行的数据合并到结果集中。
您可以在最终结果集中包含两个表中的 AlbumId 列以查看效果。
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;
SQLite inner join - 3个表连接查询

一首曲目属于一张专辑,一张专辑有多首曲目。曲目表通过 albumid 列与专辑表相关联。
一张专辑album属于一位艺术家,一位艺术家artist有一张或多张专辑。专辑表通过 artistid 列链接到艺术家表。
要从这些表中查询数据,需要在 SELECT 语句中使用两个内连接子句,如下所示:
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 子句来获取 ID 为 10 的艺术家的曲目和专辑,如以下语句:
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;

浙公网安备 33010602011771号