1、修改此SQL以列出 賽事編號matchid 和球員名 player ,該球員代表德國隊Germany入球的。要找出德國隊球員,要檢查: teamid = 'GER'
SELECT matchid,player FROM goal WHERE teamid = 'GER'
2、只顯示賽事1012的 id, stadium, team1, team2
SELECT id,stadium,team1,team2 FROM game WHERE id = 1012
3、我們可以利用JOIN
來同時進行以上兩個步驟。
SELECT *
FROM game JOIN goal ON (id=matchid)
語句FROM 表示合拼兩個表格game 和 goal的數據。語句 ON 表示如何找出 game中每一列應該配對goal中的哪一列 -- goal的 id 必須配對game的 matchid 。 簡單來說,就是
ON (game.id=goal.matchid)
以下SQL列出每個入球的球員(來自goal表格)和場館名(來自game表格)
修改它來顯示每一個德國入球的球員名,隊伍名,場館和日期。
SELECT player,teamid,stadium,mdate FROM game JOIN goal ON (id=matchid) WHERE teamid='GER';
4、列出球員名字叫Mario (player LIKE 'Mario%'
)有入球的 隊伍1 team1, 隊伍2 team2 和 球員名 player
SELECT team1,team2,player FROM game JOIN goal ON (id=matchid) WHERE player LIKE 'Mario%';
5、表格eteam
貯存了每一國家隊的資料,包括教練。你可以使用語句 goal JOIN eteam on teamid=id
來合拼 JOIN
表格goal
到 表格eteam
。
列出每場球賽中首10分鐘gtime<=10
有入球的球員 player
, 隊伍teamid
, 教練coach
, 入球時間gtime
SELECT player,teamid,coach,gtime FROM goal JOIN eteam ON goal.teamid=eteam.id WHERE goal.gtime<=10
6、要合拼JOIN
表格game
和表格 eteam
,你可以使用 game JOIN eteam ON (team1=eteam.id)
或 game JOIN eteam ON (team2=eteam.id)
注意欄位id
同時是表格game
和表格 eteam
的欄位,你要清楚指出eteam.id
而不是只用id
列出'Fernando Santos'作為隊伍1 team1 的教練的賽事日期,和隊伍名。
SELECT mdate,teamname FROM game JOIN eteam ON game.team1=eteam.id WHERE eteam.coach='Fernando Santos'
7、列出場館 'National Stadium, Warsaw'的入球球員。
SELECT player FROM goal JOIN game ON game.id=goal.matchid WHERE game.stadium ='National Stadium, Warsaw'
8、以下例子找出德國-希臘Germany-Greece 的八強賽事的入球
修改它,只列出全部賽事,射入德國龍門的球員名字。
HINT
找非德國球員的入球,德國可以在賽事中作team1 隊伍1(主)或team2隊伍2(客)。 你可以用teamid!='GER'
來防止列出德國球員。 你可以用DISTINCT
來防止球員出現兩次以上。
SELECT DISTINCT(player) FROM goal JOIN game ON matchid =game.id WHERE teamid!='GER' and (team1='GER' or team2='GER')
(INNER JOIN 中条件放在
on
中和
where
中,返回的结果集是相同的
。但是left join,right join, full join外连接就不一样了。on为了反映外连接中一方的全连接,而where没有这个功能,内连接配对是可以的。)
参考:https://www.cnblogs.com/guanshan/articles/guan062.html
9、列出隊伍名稱 teamname 和該隊入球總數
SELECT teamname, COUNT(*) FROM eteam JOIN goal ON id=teamid GROUP BY teamname
10、列出場館名和在該場館的入球數字。
SELECT game.stadium, COUNT(*) FROM game JOIN goal ON game.id=goal.matchid GROUP BY game.stadium
11、每一場波蘭'POL'有參與的賽事中,列出賽事編號 matchid, 日期date 和入球數字。
SELECT goal.matchid, game.mdate,COUNT(*) FROM game JOIN goal ON goal.matchid = game.id WHERE(game.team1 = 'POL' OR game.team2 = 'POL') GROUP BY goal.matchid, game.mdate
(goal.matchid, game.mdate在各自的表中都不唯一,而我们想要展示的是一个赛事编号和一个日期想对应的,所以两者同时使用GROUP BY)
12、每一場德國'GER'有參與的賽事中,列出賽事編號 matchid, 日期date 和德國的入球數字。
SELECT goal.matchid, game.mdate,COUNT(*) FROM game JOIN goal ON goal.matchid = game.id WHERE(game.team1 = 'GER' OR game.team2 = 'GER') AND teamid='GER' GROUP BY goal.matchid, game.mdate
13、列出每场赛事两队得分(这个题目一开始也不清楚干嘛)
SELECT mdate,team1,
SUM( CASE WHEN teamid=team1
THEN 1
ELSE 0 END) score1,
team2,
SUM( CASE WHEN teamid=team2
THEN 1
ELSE 0 END) score2
FROM game JOIN goal ON matchid = id
GROUP BY mdate,matchid,team1,team2;
SELECT mdate,team1,
SUM( CASE WHEN teamid=team1
THEN 1
ELSE 0 END) AS score1,/*这是什么造型啊*/加上AS就懂了
team2,
SUM( CASE WHEN teamid=team2
THEN 1
ELSE 0 END) AS score2/*这是什么造型啊*/加上AS就懂了
FROM game JOIN goal ON matchid = id
GROUP BY mdate,matchid,team1,team2;
1、找出 收錄 歌曲song
'Alison'
碟名title
和 歌手 artist
。.
SELECT album.title,album.artist FROM album JOIN track ON (album.asin=track.album) WHERE song = 'Alison'
2、哪一歌手artist
錄了歌曲 song
'Exodus'
?
SELECT album.artist FROM album JOIN track ON (album.asin=track.album) WHERE song = 'Exodus'
3、為大碟album
'Blur'
, 顯示每一首歌的歌名 song
。
SELECT track.song FROM album JOIN track ON (album.asin=track.album WHERE album.title = 'Blur'
4、為每一大碟album
顯示碟名title
和每大碟的歌曲track
數量。
SELECT album.title,COUNT(song) track FROM album JOIN track ON album.asin=track.album GROUP BY title
5、為每一大碟album
列出碟名title
歌名中有'Heart'
一詞的歌曲數量。 (沒有這些歌的大碟不用列出).
SELECT album.title,COUNT(song) track FROM album JOIN track ON album.asin=track.album AND track.song LIKE '%Heart%' GROUP BY title
6、主題歌曲是歌名 song
和大碟名字 title
相同。找出主題歌曲。
SELECT track.song FROM album JOIN track ON album.asin=track.album and album.title=track.song
7、同名大碟是指大碟和歌手名字相同。 (例如大碟'Blur'
是由樂隊 'Blur'
主唱)。 找出同名大碟。
SELECT title FROM album where title=artist
8、找出歌曲收錄在2隻以上的大碟中。列出收錄次數。
SELECT song, COUNT(DISTINCT(title)) FROM album JOIN track ON asin=album GROUP BY song HAVING COUNT(DISTINCT(title))>2;having可以和聚合函数一起使用。但是这个答案在练习时总显示结果数据不对,不知道错哪儿了、
(虽然 COUNT(DISTINCT(title))和 COUNT(DISTINCT(asin))结果是一样的,但是题目答案可能设定的是 COUNT(DISTINCT(asin)),改成asin就正确了)
9、好價大碟是指大碟中每一首歌曲的價格是少於5角。 找出好價大碟,列出大碟名字,售價和歌曲數量。
SELECT title,price,COUNT(song) FROM album JOIN track ON asin=album GROUP BY title,price HAVING price/COUNT(song)<0.5;5角是0.5元
10、按歌曲量(多至少)列出每一大碟的碟名和歌曲數量。
SELECT title,COUNT(asin) FROM album JOIN track ON asin=album GROUP BY title,asin ORDER BY COUNT(asin) DESC ;