SQLZOO 6.The-JOIN-operation

187 阅读4分钟

FootballERD.png

game
idmdatestadiumteam1team2
10018 June 2012National Stadium, WarsawPOLGRE
10028 June 2012Stadion Miejski (Wroclaw)RUSCZE
100312 June 2012Stadion Miejski (Wroclaw)GRECZE
100412 June 2012National Stadium, WarsawPOLRUS
...
goal
matchidteamidplayergtime
1001POLRobert Lewandowski17
1001GREDimitris Salpingidis51
1002RUSAlan Dzagoev15
1002RUSRoman Pavlyuchenko82
...
eteam
idteamnamecoach
POLPolandFranciszek Smuda
RUSRussiaDick Advocaat
CZECzech RepublicMichal Bilek
GREGreeceFernando Santos
...

1.

列出德国得分的matchid和名称。

SELECT matchid, player FROM goal 
  WHERE teamid = 'GER'

Correct answer

matchidplayer
1008Mario Gómez
1010Mario Gómez
1010Mario Gómez
1012Lukas Podolski
1012Lars Bender
1026Philipp Lahm
1026Sami Khedira
1026Miroslav Klose
1026Marco Reus
1030Mesut Özil

2.

列出 比赛编号为1012d的id, stadium, team1, team2

SELECT id,stadium,team1,team2
  FROM game 
WHERE id =1012

Correct answer

idstadiumteam1team2
1012Arena LvivDENGER

4.

列出所有以Mario开头的得分球员,按team1,team2,player顺序。

SELECT team1,team2,player
FROM game a 
JOIN goal b ON ( a.id = b.matchid ) WHERE b.player LIKE 'Mario%'

Correct answer

team1team2player
GERPORMario Gómez
NEDGERMario Gómez
NEDGERMario Gómez
IRLCROMario Mandžukic
IRLCROMario Mandžukic
ITACROMario Mandžukic
ITAIRLMario Balotelli
GERITAMario Balotelli
GERITAMario Balotelli

5.

列出所有在前十分钟得分的player,teamid,coach,gtime

SELECT player, teamid, coach, gtime
  FROM goal a JOIN eteam b ON a.teamid=b.id
 WHERE gtime<=10

Correct answer

playerteamidcoachgtime
Petr JirácekCZEMichal Bílek3
Václav PilarCZEMichal Bílek6
Mario MandžukicCROSlaven Bilic3
Fernando TorresESPVicente del Bosque4

6.

列出比赛为team1,球队教练是'Fernando Santos'的球队比赛时间以及队伍名称。

SELECT mdate, teamname
FROM eteam a JOIN game b ON a.id=b.team1 
WHERE a.coach ='Fernando Santos'

Correct answer

mdateteamname
12 June 2012Greece
16 June 2012Greece

7.

列出所有在'National Stadium, Warsaw'场馆得分的球员名称。

SELECT player
FROM game a
JOIN goal b ON a.id=b.matchid
WHERE a.stadium = 'National Stadium, Warsaw'

Correct answer

player
Robert Lewandowski
Dimitris Salpingidis
Alan Dzagoev
Jakub Blaszczykowski
Giorgos Karagounis
Cristiano Ronaldo
Mario Balotelli
Mario Balotelli
Mesut Özil

8.

列出对战德国队进球的球员名称。

SELECT DISTINCT(player)
  FROM game JOIN goal ON matchid = id 
    WHERE (team1='GER' or team2='GER' ) AND teamid <> 'GER'

Correct answer

player
Robin van Persie
Michael Krohn-Dehli
Georgios Samaras
Dimitris Salpingidis
Mario Balotelli

9.

列出各个球队的进球总数。

SELECT teamname, count(teamid)
  FROM eteam JOIN goal ON id=teamid
GROUP BY teamname

Correct answer

teamnamecount(teamid)
Croatia4
Czech Republic4
Denmark4
England5
France3
Germany10
Greece5
Italy6
Netherlands2
Poland2
Portugal6
Republic of Ireland1
Russia5
Spain12
Sweden5
Ukraine2

10.

列出各个场馆的进球总数。

SELECT stadium, count(teamid)
  FROM game JOIN goal ON id=matchid
GROUP BY stadium

Correct answer

stadiumcount(teamid)
Arena Lviv9
Donbass Arena7
Metalist Stadium7
National Stadium, Warsaw9
Olimpiyskiy National Sports Complex14
PGE Arena Gdansk13
Stadion Miejski (Poznan)8
Stadion Miejski (Wroclaw)9

11.

列出包含波兰的每场比赛,展示matchid, date,以及每场比赛的进球总数

SELECT matchid,mdate, count(id)
  FROM game JOIN goal ON matchid = id 
 WHERE (team1 = 'POL' OR team2 = 'POL')
GROUP BY matchid, mdate

Correct answer

matchidmdatecount(id)
10018 June 20122
100412 June 20122
100516 June 20121

12.

列出包含波兰的每场比赛,展示matchid, date,以及每场比赛德国的的进球总数

SELECT matchid,mdate, count(id)
  FROM game JOIN goal ON matchid = id 
 WHERE (team1 = 'GER' OR team2 = 'GER') AND teamid = 'GER'
GROUP BY matchid, mdate

Correct answer

matchidmdatecount(id)
10089 June 20121
101013 June 20122
101217 June 20122
102622 June 20124
103028 June 20121

13.

列出每场比赛的比分板,mdate,team1,score1,team2,score2,以mdate, matchid, team1 and team2排序。

SELECT mdate,
  team1,
  sum(CASE WHEN teamid=team1 THEN 1 ELSE 0 END) AS score1,
  team2,
  sum(CASE WHEN teamid=team2 THEN 1 ELSE 0 END) AS score2
  FROM game LEFT JOIN goal ON matchid = id
GROUP BY id,mdate,team1,team2
ORDER BY mdate,matchid,team1,team2

Correct answer

mdateteam1score1team2score2
1 July 2012ESP4ITA0
10 June 2012ESP1ITA1
10 June 2012IRL1CRO3
11 June 2012FRA1ENG1
11 June 2012UKR2SWE1
12 June 2012GRE1CZE2
12 June 2012POL1RUS1
13 June 2012DEN2POR3
13 June 2012NED1GER2
14 June 2012ITA1CRO1
14 June 2012ESP4IRL0
15 June 2012UKR0FRA2
15 June 2012SWE2ENG3
16 June 2012CZE1POL0
16 June 2012GRE1RUS0
17 June 2012POR2NED1
17 June 2012DEN1GER2
18 June 2012CRO0ESP1
18 June 2012ITA2IRL0
19 June 2012ENG1UKR0
19 June 2012SWE2FRA0
21 June 2012CZE0POR1
22 June 2012GER4GRE2
23 June 2012ESP2FRA0
24 June 2012ENG0ITA0
27 June 2012POR0ESP0
28 June 2012GER1ITA2
8 June 2012POL1GRE1
8 June 2012RUS4CZE1
9 June 2012NED0DEN1
9 June 2012GER1POR0