1. 程式人生 > >CD庫查詢練習

CD庫查詢練習

語法 所有 group sql語法 value lur 過濾 依次 bin

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庫查詢練習