Sql 连接两个包含要查询的csv文件的表

Sql 连接两个包含要查询的csv文件的表,sql,sqlite,csv,foreign-keys,Sql,Sqlite,Csv,Foreign Keys,我有两个csv文件,一个是关于艺术家的,一个是关于Billboard 100首歌曲的,如下所示: CREATE TABLE Artist(Artist_ID int not null primary key, Artist varchar(30), Followers int, Genres varchar(200), NumAlbums int, YearFirstAl

我有两个csv文件,一个是关于艺术家的,一个是关于Billboard 100首歌曲的,如下所示:

CREATE TABLE Artist(Artist_ID int not null primary key, 
                    Artist varchar(30), Followers int, 
                    Genres varchar(200), NumAlbums int, 
                    YearFirstAlbum int, Gender char(1), 
                    Group_Solo varchar(5) ); 

CREATE TABLE Billboard(Song_ID int not null primary key, 
                    Artists varchar(90), Name varchar(20), 
                    Weekly_rank int, Peak_position int, 
                    Weeks_on_chart int, Week Date, Date varchar(20),     
                    Genre varchar(20), Writing_Credits varchar(20), 
                    Lyrics varchar(10), Features varchar(20) );
艺术家(前4行)

广告牌(第一排)

现在我必须编写一个SQL查询来打印每个艺术家以及他们发行的专辑数量和他们拥有的Billboard100首歌曲数量,这需要我加入两个表。这两个表的模式如下所示:

CREATE TABLE Artist(Artist_ID int not null primary key, 
                    Artist varchar(30), Followers int, 
                    Genres varchar(200), NumAlbums int, 
                    YearFirstAlbum int, Gender char(1), 
                    Group_Solo varchar(5) ); 

CREATE TABLE Billboard(Song_ID int not null primary key, 
                    Artists varchar(90), Name varchar(20), 
                    Weekly_rank int, Peak_position int, 
                    Weeks_on_chart int, Week Date, Date varchar(20),     
                    Genre varchar(20), Writing_Credits varchar(20), 
                    Lyrics varchar(10), Features varchar(20) );
这是我插入csv文件时前几行的结果:

现在你知道什么是最好的查询方式来打印每个艺术家以及他们发行的专辑数量和Billboard100首歌曲的数量吗?因为我没有在billboard表中插入外键?或者我应该修改我的模式


提前谢谢

我建议将艺人从广告牌上移除,并创建一个新的桌子来容纳艺人及其歌曲(特别是考虑到艺人可以是独唱或集体演唱)。不建议在SQL中的同一列中有多个值。此外,最好存储id,而不是艺术家名称本身

您可以创建如下表:

CREATE TABLE Artist_Billboard
(Artist_id int,
Song_id int,
FOREIGN KEY(Artist_id) REFERENCES Artist(Artist_id),
FOREIGN KEY(Song_id) REFERENCES Billboard(Song_id))
一旦您创建了这个表,就可以很容易地获取所需的信息。你所要做的就是:

select a.Artist, NumAlbums, count(ab.artist_id) Billboard100
from Artist_Billboard  ab
join Artist a on a.Artist_id = ab.Artist_id
group by a.Artist, NumAlbums
DB小提琴:

关于以下评论问题的更新: 我不确定我是否理解你的问题。如果您询问如何识别歌曲id和艺术家id并执行插入,请参阅


目前歌曲名称和艺术家名称是硬编码的。你必须做类似的事情。

一首歌可以有多个艺术家吗?如果是,您如何存储这些信息?编写查询的方式也取决于此。什么是广告牌100首歌?我建议在公告牌表格中存储艺术家id而不是艺术家名称。是的,可以,我将这些存储为有多个艺术家被视为艺术家,因此,例如,如果ed sheeran单独创作了一首歌曲,并且与camila cabelo合作创作了一首歌曲,那么将有两名艺术家和两首歌曲(ed Sheerand和ed sheeran,camila cabelo)。布告牌100首歌曲都包含在布告牌表格中。非常感谢您的广泛回答。我能问你最后一件事吗?当您执行“插入艺术家\广告牌”时,是否有办法通过使艺术家id与其歌曲id匹配来插入来自艺术家和广告牌表格的id?