在下面的示例中,我们可以看到 artist 表的前几行。它有两列,artist_id 和 name。artist_id 列充当此表的主键,它是整数列,并且每个值都不同。
+-----------+-------------------+| artist_id | name ||-----------+-------------------||1|AC/DC||2| Accept ||3| Aerosmith ||4| Alanis Morissette ||5| Alice In Chains |+-----------+-------------------+技术支持
现在来看 album 表。您能找到主键吗?是的,就是 album_id 列。主键通常被命名为“表名_下划线_id”。不过,您也会注意到还有一个 artist_id 列。它同样由整数构成,且与 artist 表中的 artist_id 列同名。这意味着什么?
+----------+-------------------------+-----------+| album_id | title | artist_id ||----------+-------------------------+-----------||1| For Those About To Rock |1||2| Balls to the Wall |2||3| Restless and Wild |2||4| Let There Be Rock |1||5| Big Ones |3|+----------+-------------------------+-----------+技术支持
外键(Foreign Keys)
从上面的输出可以清楚地看到,artist 表中的 artist_id 充当了 album 表的一个 Foreign_key。FOREIGN KEY 约束用于防止破坏表与表之间链接的操作。
artist 表
+-----------+-------------------+| artist_id | name ||-----------+-------------------||1|AC/DC||2| Accept ||3| Aerosmith ||4| Alanis Morissette ||5| Alice In Chains |+-----------+-------------------+技术支持
album 表
+----------+-------------------------+-----------+| album_id | title | artist_id ||----------+-------------------------+-----------||1| For Those About To Rock |1||2| Balls to the Wall |2||3| Restless and Wild |2||4| Let There Be Rock |1||5| Big Ones |3|+----------+-------------------------+-----------+技术支持
这意味着当 album 表中的 artist_id 与 artist 表中的 artist_id 匹配时,这些行就可以作为一次 JOIN 被链接起来。
连接 Album 和 Artist
artist 表中的第 1 行和第 4 行的 artist_id 值都是 1。artist 表中 artist_id 为 1 的艺术家是 AC/DC。因此,当我们将两个表连接起来时,会返回 album 表中的专辑详情,以及 artist 表中对应的艺术家详情——使用两个表共有的 artist_id 字段进行连接。
这被称为 inner 连接。
SELECT
album_id,
title,
album.artist_id,
name AS artist_name
FROM album
INNERJOIN artist ON artist.artist_id = album.artist_id
WHERE album.artist_id =1;技术支持
+----------+-------------------------+-----------+-------------+| album_id | title | artist_id | artist_name ||----------+---------------------------------------+-----------||1| For Those About To Rock |1|AC/DC||4| Let There Be Rock |1|AC/DC|+----------+-------------------------+-----------+-------------|技术支持
我们通过将 artist 表中的 artist_id 与 album 表中的 artist_id 相匹配来连接了 album 和 artist 两个表。
当从不同表中选择同名列时,您必须使用完整限定的列名。否则,SQL Server 将无法知道应从哪个表中 SELECT 该列。
要完整限定列名,您需要在其前面加上相应的表名,随后加上一个点号。
Inner Join 语法
这里有一个通用示例来帮助回忆语法。当我们从主表(此处为 table_A)选择相关列后,再选择希望连接的附加列(此处来自 table_B)。然后使用关键字 INNER JOIN 和 ON 指定连接,并提供两个表中所需的键列。
在这个示例中,我们没有指定 WHERE 子句,因此会返回 artist 和 album 表之间所有匹配的所有组合,同样基于两个表共有的 artist_id 列。
SELECT
album_id,
title,
album.artist_id,
name AS artist_name
FROM album
INNERJOIN artist on artist.artist_id = album.artist_id;技术支持
+----------+---------------------------------------+-----------+| album_id | title | artist_id | artist_name ||----------+---------------------------------------+-----------||1| For Those About To Rock |1|AC/DC||4| Let There Be Rock |1|AC/DC||2| Balls To The Wall |2| Accept ||3| Restless and Wild |2| Accept |+----------+---------------------------------------+-----------+技术支持
多重 Inner Join
您也可以使用 INNER JOINS 将两个以上的表连接起来。对于每一组表的组合,只需再提供一个 INNER JOIN 即可。在下面的代码中,我们连接了表 A 和 B,以及 B 和 C。
SELECT
table_A.columnX,
table_A.columnY,
table_B.columnZ table_C columnW
FROM table_A
INNERJOIN table_B ON table_B.foreign_key = table_A.primary_key
INNERJOIN table_C ON table_C.foreign_key = table_B.primary_key;技术支持
SQL Server 是一种关系型数据库管理系统。关系型数据库的一个关键原则是数据分布存储在多个表中。
为了提取所需数据,我们需要能够将表连接在一起。我们使用
primary和foreign键来连接表。主键(Primary Key)
主键是用于唯一标识表中每一行的列。这种唯一性可以通过使用顺序整数作为标识列来实现。或者,有时现有列本身就包含唯一值,也可以用作主键。
在下面的示例中,我们可以看到
artist表的前几行。它有两列,artist_id和name。artist_id列充当此表的主键,它是整数列,并且每个值都不同。现在来看
album表。您能找到主键吗?是的,就是album_id列。主键通常被命名为“表名_下划线_id”。不过,您也会注意到还有一个artist_id列。它同样由整数构成,且与 artist 表中的artist_id列同名。这意味着什么?外键(Foreign Keys)
从上面的输出可以清楚地看到,artist 表中的
artist_id充当了 album 表的一个Foreign_key。FOREIGN KEY约束用于防止破坏表与表之间链接的操作。artist表album表这意味着当 album 表中的
artist_id与 artist 表中的artist_id匹配时,这些行就可以作为一次JOIN被链接起来。连接 Album 和 Artist
artist 表中的第 1 行和第 4 行的
artist_id值都是 1。artist 表中artist_id为 1 的艺术家是 AC/DC。因此,当我们将两个表连接起来时,会返回 album 表中的专辑详情,以及 artist 表中对应的艺术家详情——使用两个表共有的artist_id字段进行连接。这被称为
inner连接。我们通过将 artist 表中的
artist_id与 album 表中的artist_id相匹配来连接了 album 和 artist 两个表。当从不同表中选择同名列时,您必须使用完整限定的列名。否则,SQL Server 将无法知道应从哪个表中
SELECT该列。要完整限定列名,您需要在其前面加上相应的表名,随后加上一个点号。
Inner Join 语法
这里有一个通用示例来帮助回忆语法。当我们从主表(此处为
table_A)选择相关列后,再选择希望连接的附加列(此处来自table_B)。然后使用关键字INNER JOIN和ON指定连接,并提供两个表中所需的键列。不使用
WHERE子句在这个示例中,我们没有指定
WHERE子句,因此会返回 artist 和 album 表之间所有匹配的所有组合,同样基于两个表共有的artist_id列。多重 Inner Join
您也可以使用
INNER JOINS将两个以上的表连接起来。对于每一组表的组合,只需再提供一个INNER JOIN即可。在下面的代码中,我们连接了表 A 和 B,以及 B 和 C。要进一步学习如何连接表,请观看我们课程 Introduction to SQL Server 中的这个视频。
本文内容摘自 John MacKintosh 在 DataCamp 推出的 Introduction to SQL Server 课程。