C# SQL查询,需要帮助理解它吗 我对编程很熟悉,我可以用C++、PHP、java编程,但到目前为止我还没有遇到SQL查询。我目前正在攻读计算机学位

C# SQL查询,需要帮助理解它吗 我对编程很熟悉,我可以用C++、PHP、java编程,但到目前为止我还没有遇到SQL查询。我目前正在攻读计算机学位,c#,sql,sql-server,C#,Sql,Sql Server,我是个体经营者,有一个为公司编写的程序。直到最近,程序员再也不能照看我的程序了,所以当我在学习编程并且有了一个公平的想法时,我想我会自己接管这个项目 该程序是用C语言编写的,它使用SQL来获取数据。正如我所说,我在学习中还没有遇到过SQL,所以我对它完全是个新手 我曾尝试学习SQL查询,但在理解它时遇到困难。有人能解释一下查询的每一部分都做了什么,这样我就可以了解它,并希望能理解它 SELECT top 3 tracks.trackid AS id, TrackTitl

我是个体经营者,有一个为公司编写的程序。直到最近,程序员再也不能照看我的程序了,所以当我在学习编程并且有了一个公平的想法时,我想我会自己接管这个项目

该程序是用C语言编写的,它使用SQL来获取数据。正如我所说,我在学习中还没有遇到过SQL,所以我对它完全是个新手

我曾尝试学习SQL查询,但在理解它时遇到困难。有人能解释一下查询的每一部分都做了什么,这样我就可以了解它,并希望能理解它

SELECT top 3 tracks.trackid AS id,
             TrackTitle,
             ArtistName,
             row_number() over (
                                ORDER BY Tracks.TrackPlayed DESC) AS rank,
             categorytitle,
             categorytitle AS title,
             CategoryImagePath
FROM Tracks
JOIN artists ON tracks.artistid = artists.artistid
JOIN x_categories_tracks ON x_categories_tracks.trackid = tracks.trackid
JOIN Categories ON categories.categoryid = x_categories_tracks.categoryid
WHERE trackactive = 'true'
  AND categories.categoryid = @optsId 
ORDER BY trackplayed DESC
如果需要任何其他信息,请告诉我

提前感谢。

查询的作用: 对于作为opts.id属性中的参数传入的给定Sing/Track类别,它返回处于活动状态的前3个播放最多的曲目的歌曲/曲目信息

目的:查询的每一部分都提供服务。 从结果集中获取前3行

选择前三名

从结果集中选择要进一步处理的字段 tracks.trackid作为id、TrackTitle、艺人姓名

按TrackPlayed值按desc降序对符合选择条件的记录进行分组,以便播放次数最多的记录在结果集中的第一个。 按曲目顺序排列的行号。曲目播放描述为秩

从resultset中选择更多要进一步处理的字段 +categorytitle,categorytitle作为标题,CategoryImagePath来自曲目

SQL连接条件来链接相关的各种表。 +加入曲目中的艺术家。artistid=艺术家。artistid+ 在x_categories_tracks.trackid=tracks.trackid上加入x_categories_轨迹+ 在Categories.categoryid=x_Categories_tracks.categoryid上连接类别+

用于筛选记录的WHERE子句。在这里,我们只选择活动的轨迹,这些轨迹属于作为参数传入的opts.id中存储的类别? 其中trackactive='true'和categories.categoryid=+opts.id+

最后,按播放次数的降序排列返回的前3条记录,即播放次数最多的记录排在第一位。
按TrackDisc订购

在理解上面提供的SQL代码之前,您应该尝试了解每个SQL命令的功能。在阅读此SQL语句之前,您需要了解以下主题:

SELECT, TOP, Alias Table, Ranking Functions, ORDER BY, JOINS, WHERE. 

如果您学习了这些命令,我相信您将很容易理解这些代码

您是否尝试过接受该查询并直接对数据库运行它?而且,这只是sql server,不是mysql吗?两个标签都没有价值当然不是MySQL-没有行数窗口功能…它只会根据类别和播放量返回前3首曲目。我想说的是,行号看起来像MS SQL Server DBAlso,请注意,此查询没有参数化,并且要接受SQL注入。非常感谢CodeProDevkotaThanks非常感谢Shiva,非常感谢appreciated@Shiva这是对这个问题的一个很好的回答。但你为什么也因为问题太宽泛而投票搁置呢?乍一看,我觉得问题太宽泛了,所以投票了。然后我设身处地为OP着想,意识到我已经多次处于这种情况下,我自己继承了别人的代码,尽管帮助OP是正确的。这就是详细的答案。正如你所知道的,旗帜是不能缩回的。因此它就呆在那里。。。