首页 > 代码库 > CD库查询练习

CD库查询练习

1a. 找出包含song(歌曲) ‘Alison‘的专辑 title(名称) 和 artist(作者) SELECT title, artist FROM album JOIN track ON (album.asin=track.album) WHERE song = ‘Alison‘ 这种表与表之间的连接方式也称为笛卡尔积。也就是第一张表上的一行都会逐个与第二张表的所有行连接,然后再喊另外一行,依次类推,直到第一张表的所有行都连接完。那么连接后的行数就是第一张表的行数*第二张表的行数。可见这样的连接非常的消耗资源浪费空间,因此我们需要在两张表上建立一种关系,通过这种关系去掉所有多余的行。这里我们就使用了album.asin=track.album来建立两张表的关系。 1b. 哪个artist(作者)录制了song(歌曲) ‘Exodus‘? SELECT artist FROM album JOIN track ON (asin=album) WHERE song = ‘Exodus‘ 1c. 列出track(曲目表)中所有属于‘Blur‘album(专辑)的 song(歌曲) SELECT song FROM album JOIN track ON (asin=album) WHERE title = ‘Blur‘ 2a. 显示每张album(专辑)的title(名称) 和包含的track曲目数. SELECT title, COUNT(*) FROM album JOIN track ON (asin=album) GROUP BY title 这道题在连接两张表后又加上了分组。当两张表连接完后,就相当于在一张表上操作。 2b. 显示每张album(专辑)的 title(名称) 以及曲目名称中包含‘Heart‘的曲目总数. (如果专辑中如果没有满足条件的曲目,则不要显示该专辑.). SELECT title, COUNT(*) FROM album JOIN track ON (asin=album) WHERE song LIKE ‘%Heart%‘ GROUP BY title 注意:如果要在分组的表上使用WHERE过滤,那么必须将WHERE语句写在GROUP BY 的前面 2c. "title track" (主打曲目)就是song(歌名)和  title(专辑名)相同的曲目. 请找出所有的title tracks(主打曲目). SELECT song FROM album JOIN track ON (asin=album) WHERE song = title 2d. An "eponymous" album(同名专辑)就是专辑名和artist(作者名)相同的专辑. (例如,乐队 ‘Blur‘的专辑‘Blur‘就是同名专辑 ). 请列出eponymous albums(同名专辑). SELECT title FROM album WHERE artist = title 这道题并没有使用表连接。 3a. 找出在两张以上专辑中出现过的歌曲.同时包含出现的次数. SELECT song, COUNT(*) FROM album JOIN track ON asin=album GROUP BY song HAVING COUNT(*)>2 这道题使用了Having语句,因为只有having语句可以使用聚合函数,Where语句则不行。 3b. A "good value" album (一张物超所值的专辑)就是专辑中每首歌曲的定价低于 50 pence(便士)的专辑.请找出这些专辑,并显示 title(专辑标题), the price(专辑价格)和 the number of tracks(曲目总数). SELECT title, price, COUNT(song) FROM album JOIN track ON asin=album GROUP BY title, price HAVING price/COUNT(song) < 0.50 我在做这道题的时候想了很久,结果老是不正确,并不是这道题的SQL语法有多难,而是这道题的题意不好理解,起初我以为50便士就是50元,直接用< 50来做,怎么也不对,后来我才知道50便士其实相当于RMB的5毛,那么就应该是0.5,看来地域的差异也会影响到程序的不同。 3c. Wagner‘s Ring cycle 的专辑有 173 tracks(曲目), Bing Crosby 的专辑包含101 tracks(曲目).请根据专辑中包含曲目的多少,从多到少依次列出这些专辑的名称和包含的总曲目数. SELECT title, COUNT(asin) FROM album JOIN track ON asin=album GROUP BY asin,title ORDER BY 2 DESC

CD库查询练习