Skip to main content

SQLite内部连接及其示例

SQLite内部连接子句简介

在关系数据库中,数据通常分布在许多相关的表中。一个表使用外键与另一个表相关联。

要从多个表中查询数据,可以使用内部JOIN子句。internal JOIN子句组合了相关表中的列。

假设你有两张桌子:A和B。

A有a1、a2和f列。B有b1、b2和f列。A表使用名为f的外键列链接到B表。

以下说明了内部联接子句的语法:

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列中的数据,并将此行包含在结果集中。

换句话说,内部JOIN子句返回A表中的行,该表在B表中有对应的行。

如果连接两个以上的表,则应用此逻辑。

请参见下面的示例。

SQLite Inner Join Example

结果集中只包括A表中的行:(a1,1)、(a3,3)与B表(b1,1)、(b2,3)中的相应行。

下图说明了内部联接子句:

SQLite inner join venn diagram

SQLite内部连接示例

让我们看看示例数据库中的曲目和唱片表。tracks表通过AlbumId列链接到albums表。

在tracks表中,AlbumId列是外键。在albums表中,AlbumId是主键。

要从曲目和相册表中查询数据,请使用以下语句:

SELECT
trackid,
name,
title
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid;

试试看

SQLite Inner Join 2 Tables Example

对于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 Example

SQLite内部联接–3个表示例

请参见下表:曲目专辑和艺术家

一首歌属于一张专辑,一张专辑有很多首歌。通过albumid列与albums表关联的tracks表。

一张专辑属于一位艺术家,一位艺术家有一张或多张专辑。albums表通过artistid列链接到artists表。

要从这些表中查询数据,需要在SELECT语句中使用两个内部join子句,如下所示:

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;

试试看

SQLite Inner Join 3 tables

您可以使用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;

试试看

SQLite INNER JOIN with WHERE clause

在本教程中,您学习了如何使用SQLite内部联接子句从多个表中查询数据。