CD庫查詢練習
阿新 • • 發佈:2017-05-31
語法 所有 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庫查詢練習