Music Tutorial/zh
音樂數據庫The Music database
此教程使用簡介表格連接的使用。音樂數據庫有兩個表格:album
大碟 和 track
曲目。
album(asin, title, artist, price, release, label, rank)
大碟(asin, 碟名, 歌手, 售價, 推出, 標籤, 排名)
track(album, dsk, posn, song)
曲目(大碟, 碟號, 軌號, 歌名)
如何進行表格合拼
語句code>FROM album JOIN track ON album.asin=track.album 代表合拼表格 album
和
track
。 這個合拼 JOIN
得出的每一個紀錄是一首歌。除了歌曲的欄位外(album
,
disk
, posn
和 song
),結果還包括每首歌對應的大碟資料album
(title
, artist
...)。
找出 收錄 歌曲song
'Alison'
碟名title
和 歌手 artist
。.
SELECT *
FROM album JOIN track
ON (album.asin=track.album)
WHERE song = 'Alison'
SELECT title, artist
FROM album JOIN track
ON (album.asin=track.album)
WHERE song = 'Alison'
哪一歌手artist
錄了歌曲 song
'Exodus'
?
SELECT artist
FROM album JOIN track ON (asin=album)
WHERE song = 'Exodus'
為大碟album
'Blur'
, 顯示每一首歌的歌名 song
。
SELECT song
FROM album JOIN track ON (asin=album)
WHERE title = 'Blur'
我們可以在合拼表格時,使用群組函數和GROUP BY
。
為每一大碟album
顯示歌名title
和每大碟的歌曲。
track
數量。
SELECT title FROM album JOIN track ON (asin=album)
GROUP BY title
SELECT title, COUNT(*)
FROM album JOIN track ON (asin=album)
GROUP BY title
為每一大碟album
列出碟名title
歌名中有'Heart'
一詞的歌曲數量。
(沒有這些歌的大碟不用列出).
使用 song LIKE '%Heart%' 來找尋有Heart
一詞的歌名。
SELECT title, COUNT(*)
FROM album JOIN track ON (asin=album)
WHERE song LIKE '%Heart%'
GROUP BY title
主題歌曲是歌名 song
和大碟名字 title
相同。找出主題歌曲。
SELECT song
FROM album JOIN track ON (asin=album)
WHERE song = title
同名大碟是指大碟和歌手名字相同。
(例如大碟'Blur'
是由樂隊 'Blur'
主唱)。
找出同名大碟。
你只需使用一個表格,不用使用 JOIN
。
SELECT title
FROM album
WHERE artist = title
找出歌曲收錄在2隻以上的大碟中。列出收錄次數。
HAVING
語句可以在GROUP BY
之後使用。
SELECT song, COUNT(DISTINCT asin)
FROM album JOIN track ON asin=album
GROUP BY song
HAVING COUNT(DISTINCT asin)>2
好價大碟是指大碟中每一首歌曲的價格是少於5角。 找出好價大碟,列出大碟名字,售價和歌曲數量。
SELECT title, price, COUNT(song)
FROM album JOIN track ON asin=album
GROUP BY title, price
HAVING price/COUNT(song) < 0.50
歌手Wagner的大碟 Ring cycle 有173首歌曲, 歌手Bing Crosby有一大碟 收錄了 101首歌曲。
SELECT title, COUNT(asin)
FROM album JOIN track ON asin=album
GROUP BY asin,title
ORDER BY 2 DESC