• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
LOFLY
终其一生,编织快乐
博客园    首页    新随笔    联系   管理    订阅  订阅

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 个以上的表,则应用此逻辑。

看下面的例子:
image

只有A表中的行:(a1,1)、(a3,3)有B表中对应行(b1,1)、(b2,3)才包含在结果集中。

下图说明了INNER JOIN子句的关系:

image

SQLite INNER JOIN 例子

image

在曲目tracks表中,AlbumId 列是外键。而在专辑albums表中,AlbumId 是主键。

为了能在tracks和albums表中查询数据,你可以使用以下语句。

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

image

对于 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个表连接查询

image

一首曲目属于一张专辑,一张专辑有多首曲目。曲目表通过 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;

image

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

image

posted @ 2024-07-22 11:17  编织快乐  阅读(48)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3